正如标题所说,我想让np.where()多次返回一个坐标,如果遇到相同的值,例如:
import numpy as np
a = 2*np.arange(5)
b = [8,8]
condition = np.isin(a,b)
print np.where(condition)
>>> (array([4], dtype=int64),)
它返回[4],因为a [4] = 8,但由于b有两个8,我希望它返回[4,4],有没有办法在不迭代每个b值的情况下执行此操作?
答案 0 :(得分:1)
使用a
,b
:
In [687]: condition=isin(a,b)
In [688]: condition
Out[688]: array([False, False, False, False, True], dtype=bool)
where
只是告诉我们一个True
值的索引。
切换测试,您发现b
的两个项都在a
。
In [697]: isin(b,a)
Out[697]: array([ True, True], dtype=bool)
您可以使用简单的广播比较:
In [700]: a[:,None]==b
Out[700]:
array([[False, False],
[False, False],
[False, False],
[False, False],
[ True, True]], dtype=bool)
In [701]: np.where(a[:,None]==b)
Out[701]: (array([4, 4], dtype=int32), array([0, 1], dtype=int32))
isin
(及其使用的in1d
)担心唯一性,但您不是。因此,测试数组==
可以让您获得更多控制权。
测试b
中的两个值是否匹配相同的a
元素
In [703]: (a[:,None]==b).all(axis=1)
Out[703]: array([False, False, False, False, True], dtype=bool)
测试是否存在 - 基本上是in1d
所做的:
In [704]: (a[:,None]==b).any(axis=1)
Out[704]: array([False, False, False, False, True], dtype=bool)