Python 使用numpy.argwhere获取np.array中的匹配值
我想使用Python 使用numpy.argwhere获取np.array中的匹配值,python,numpy,Python,Numpy,我想使用np.argwhere()获取np.array中的值 例如: z = np.arange(9).reshape(3,3) [[0 1 2] [3 4 5] [6 7 8]] zi = np.argwhere(z % 3 == 0) [[0 0] [1 0] [2 0]] 我想要这个数组:[0,3,6],并执行了以下操作: t=[z[tuple(i)]表示zi中的i]#->[0,3,6] 我想有一个更简单的方法 为什么不在这里简单地使用掩蔽: z[z % 3 == 0] 如
np.argwhere()
获取np.array
中的值
例如:
z = np.arange(9).reshape(3,3)
[[0 1 2]
[3 4 5]
[6 7 8]]
zi = np.argwhere(z % 3 == 0)
[[0 0]
[1 0]
[2 0]]
我想要这个数组:[0,3,6]
,并执行了以下操作:
t=[z[tuple(i)]表示zi中的i]#->[0,3,6]
我想有一个更简单的方法 为什么不在这里简单地使用掩蔽:
z[z % 3 == 0]
如果传递一个具有相同维度的矩阵,并将布尔值作为索引,则会得到一个包含该矩阵元素的数组,其中布尔矩阵为True
这将进一步提高工作效率,因为您在numpy级别进行过滤(而列表理解在Python解释器级别工作)。源代码for
argwhere
def argwhere(a):
"""
Find the indices of array elements that are non-zero, grouped by element.
...
"""
return transpose(nonzero(a))
np.其中
与np.非零
相同
In [902]: z=np.arange(9).reshape(3,3)
In [903]: z%3==0
Out[903]:
array([[ True, False, False],
[ True, False, False],
[ True, False, False]], dtype=bool)
In [904]: np.nonzero(z%3==0)
Out[904]: (array([0, 1, 2], dtype=int32), array([0, 0, 0], dtype=int32))
In [905]: np.transpose(np.nonzero(z%3==0))
Out[905]:
array([[0, 0],
[1, 0],
[2, 0]], dtype=int32)
In [906]: z[[0,1,2], [0,0,0]]
Out[906]: array([0, 3, 6])
z[np.nonzero(z%3==0)]
相当于使用I,J
作为索引数组:
In [907]: I,J =np.nonzero(z%3==0)
In [908]: I
Out[908]: array([0, 1, 2], dtype=int32)
In [909]: J
Out[909]: array([0, 0, 0], dtype=int32)
In [910]: z[I,J]
Out[910]: array([0, 3, 6])
试试:
z[tuple(zi.T)]
zi=np。其中(…)
可以直接使用T=z[zi]
。这是索引数组的元组arg,其中
是它的转置。比较他们的产出。谢谢。我仍然习惯于numpy数组的索引方式,所以这对我来说并不明显。numpy操作更快,因此对于大型数据集,np是首选。这太棒了。非常感谢。
In [907]: I,J =np.nonzero(z%3==0)
In [908]: I
Out[908]: array([0, 1, 2], dtype=int32)
In [909]: J
Out[909]: array([0, 0, 0], dtype=int32)
In [910]: z[I,J]
Out[910]: array([0, 3, 6])