在numpy中,我可以找到哪个2D阵列是所有3个2D阵列中最少的,如下所示:
mat_a = np.random.random((5, 5))
mat_b = np.random.random((5, 5))
mat_c = np.random.random((5, 5))
bigmat = np.stack((mat_a, mat_b, mat_c)) # this is a 3, 5, 5 array
minima = np.argmin(bigmat, axis=0) # contains a 5x5 array of 0,1,2 for a,b,c respectively
如何扩展它,以便找到所有3个2D阵列中的第二个?
- 编辑:
预期输出是一个5 x 5 numpy数组,其中每个元素表示3个数组中的哪一个(mat_a,mat_b,mat_c)是bigmat中的第二个最小值。
因此,结构将与minima
相同,但minima
只能显示哪个数组最少。
答案 0 :(得分:0)
我敢打赌np.argsort()
是最有效的方式。
仅供参考,这是一个有趣的事情,您可以使用数组索引来解决您的问题(虽然效率较低):
max_value = np.max(bigmat)
maskmat = np.array([minima == i for i in xrange(bigmat.shape[0])])
bigmat[maskmat] = max_value # assign each minimum to the array-wide maximum
minima2 = np.argmin(bigmat, axis=0)