你可以使用
numpy.in1d,其余部分非常简单:
关键部分:
In [25]: np.in1d(xarr, y)
Out[25]: array([ True, True, False, False, False], dtype=bool)
整个例子:
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)
编辑:
对您原来的尝试进行了小的修改:
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')
您原始尝试中的问题在于
xarr in y
仅返回
False
。
in
对于NumPy数组来说是可怕的。x in y
几乎就是(x == y).any()
,无论这是否有意义。 - user2357112