我有两个在前两个维度中具有相同形状的数组,我希望在第一个数组的每一行中记录最小值。但是,我还想将元素记录在第二个数组的第三维中的相应位置。我可以这样做:
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()
时计算机必须已知“最小点的位置”。
任何提示/建议表示赞赏!感谢。
答案 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