[英]Element-wise minimum of two numpy arrays indexed by another array
我有三种形状的阵列:
A = a = np.random.exponential(1, [10, 1000000]) # of shape (10, 1000000)
B = a = np.random.exponential(1, [10, 1000000]) # of shape (10, 1000000)
我计算了另一个数组IND [],如下所示。 IND []的每个元素是A的最大元素的索引(一列中每10个值的最大值),
IND = np.argmax(snr_sr, axis=0) # of shape (1000000,)
我想计算另一个数组C,它在IND []的值指定的行#处包含A和B的元素方式最小值。 因此,C数组的形状应为(1,1000000)。 我想避免循环。 我尝试了以下操作,但是C的值不正确。
for j in range(0, A.shape[1]):
m = ind[j]
C = minimum(A[m,:], B[m,:]) # return 1x1000000 array
抱歉,由于数组很大,无法发布。 您可以采用相同形状的任何阵列。
第一次编辑:有人为我提供了正确的答案,但是他删除了它(不知道为什么?)。无论如何,我在删除答案之前先复制了答案。 请再次发布,以便我将其标记为正确。 (对他来说:为简单起见,他取了1100个数组)。
我缩短了您的数组:
a = np.random.exponential(1, [10, 100]) # of shape (10, 100)
b = np.random.exponential(1, [10, 100])
ind=np.argmax(a,axis=0)
使用那个ind
在a
和b
每列选择一行:
a_ = a[ind,np.arange(a.shape[1])]
b_ = b[ind,np.arange(a.shape[1])]
然后计算c
:
c=np.minimum(a_, b_)
注意:我不擅长numpy,因此可能会有更有效的解决方案。
首先按行查找A和B中的最小值:
minAB = np.min(np.minimum(A, B), axis=1)
然后使用ind
索引此数组:
C = minAB[ind]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.