繁体   English   中英

由另一个数组索引的两个numpy数组的元素方式最小值

[英]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)

使用那个indab每列选择一行:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM