我有2个numpy数组:
xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
y = np.array([1.1,1.2])
Run Code Online (Sandbox Code Playgroud)
我想检查每个元素是xarr属于y还是等于1.3.如果一个元素属于y,则返回"y",如果一个元素等于1.3,则返回"y1",否则返回"n"
我试过这个:
x = np.where(xarr in y,"y",np.where(xarr == 1.3,"y1","n"))
Run Code Online (Sandbox Code Playgroud)
但是得到了错误的结果,前2个元素应该是"y"而不是"n"
['n' 'n' 'y1' 'n' 'n']
Run Code Online (Sandbox Code Playgroud)
不知道我做错了什么.真的很感激任何帮助
你可以使用numpy.in1d,其余的很简单:
关键部分:
In [25]: np.in1d(xarr, y)
Out[25]: array([ True, True, False, False, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
整个例子:
In [16]: result = np.empty(len(xarr), dtype=object)
In [17]: result
Out[17]: array([None, None, None, None, None], dtype=object)
In [18]: result.fill("n")
In [19]: result
Out[19]: array(['n', 'n', 'n', 'n', 'n'], dtype=object)
In [20]: result[np.in1d(xarr, y)] = 'y'
In [21]: result
Out[21]: array(['y', 'y', 'n', 'n', 'n'], dtype=object)
In [23]: result[xarr == 1.3] = 'y1'
In [24]: result
Out[24]: array(['y', 'y', 'y1', 'n', 'n'], dtype=object)
Run Code Online (Sandbox Code Playgroud)
编辑:
对原始尝试的一个小修改:
In [16]: x = np.where(np.in1d(xarr, y),"y",np.where(xarr == 1.3,"y1","n"))
In [17]: x
Out[17]:
array(['y', 'y', 'y1', 'n', 'n'],
dtype='|S2')
Run Code Online (Sandbox Code Playgroud)
在原始尝试的问题是,xarr in y只给出False.
| 归档时间: |
|
| 查看次数: |
2239 次 |
| 最近记录: |