返回与另一个数组的最小值对应的位置中的元素

时间:2015-02-19 22:03:08

标签: python arrays numpy

我有两个在前两个维度中具有相同形状的数组,我希望在第一个数组的每一行中记录最小值。但是,我还想将元素记录在第二个数组的第三维中的相应位置。我可以这样做:

A = np.random.random((5000, 100))
B = np.random.random((5000, 100, 3))

A_mins = np.ndarray((5000, 4))

for i, row in enumerate(A):
    current_min = min(row)
    A_mins[i, 0] = current_min 
    A_mins[i, 1:] = B[i, row == current_min]

我是编程的新手(如果我错了,请纠正我),但我理解Numpy对整个数组进行计算比迭代更快。考虑到这一点,有更快的方法吗?我无法找到摆脱row == current_min位的方法,即使在计算min()时计算机必须已知“最小点的位置”。

任何提示/建议表示赞赏!感谢。

2 个答案:

答案 0 :(得分:2)

@lib谈到的事情:

index = np.argmin(A, axis=1)
A_mins[:,0] = A[np.arange(len(A)), index]
A_mins[:,1:] = B[np.arange(len(A)), index]

它比使用for循环要快得多。

答案 1 :(得分:0)

要获取最小值的索引,请使用amin而不是min + comparison

amin函数(以及numpy中的许多其他函数)也采用参数轴,您可以使用它来获取每行或每列的最小值。

请参阅http://docs.scipy.org/doc/numpy/reference/generated/numpy.amin.html