numpy:在2D数组的每一行中查找值的第一个索引
如何使用矢量化numpy函数在2D数组的每一行中找到值的第一个索引 例如,给定numpy:在2D数组的每一行中查找值的第一个索引,numpy,Numpy,如何使用矢量化numpy函数在2D数组的每一行中找到值的第一个索引 例如,给定 I = numpy.array([1,1,1] M = numpy.array([[1,2,3],[2,3,1],[3,1,2]]) 输出应为: array([0, 2, 1]) 我可以用这样的列表来完成: [ numpy.where(M[i] == I[i])[0][0] for i in range(0, len(I)) ] numpy的等价物是什么?我认为这些可以一步一步地做到: In [52]: I
I = numpy.array([1,1,1]
M = numpy.array([[1,2,3],[2,3,1],[3,1,2]])
输出应为:
array([0, 2, 1])
我可以用这样的列表来完成:
[ numpy.where(M[i] == I[i])[0][0] for i in range(0, len(I)) ]
numpy的等价物是什么?我认为这些可以一步一步地做到:
In [52]:
I = np.array([1,1,1])
#M = np.array([[1,2,3],[2,3,1],[3,1,2]])
M = np.array([[4,2,3],[2,3,4],[3,4,2]])
In [53]:
I1=I.reshape((-1,1))
In [54]:
M1=np.hstack((M, I1))
In [55]:
np.apply_along_axis(np.argmax, 1, (M1-I1)==0)
Out[55]:
array([3, 3, 3])
如果在M
中找不到该数字,则生成的索引为M.shape[1]
。由于结果是int
的数组
,因此在这些单元格中放置nan
不是一个选项。但是,如果结果是<代码>结果< /代码>:,我们可以考虑对这些情况提出“代码> -1”/代码>。
result[result==(M.shape[1])]=-1
利用矢量化的可能性如下所示
coords = ((I[:, np.newaxis] == M) * np.arange(M.shape[1], 0, -1)[np.newaxis, :]).argmax(1)
any = (I[:, np.newaxis] == M).any(1)
coords = coords[any]
它通过将递减计数器乘以每一行,使第一次出现的值具有最高值,从而消除同一行中感兴趣值的多次出现之间的歧义。如果给定的行不包含指示的值,则会将其从
coords
中删除。其余的行(在其中找到了相应的值)由any
索引。您可以发布一个输入数据和预期输出的示例吗?例如,M=np.array([[1,2,3],[4,5,6]])
和I=np.array([5,6,1])
。感谢示例输入和输出。