在numpy,Python中,当我想要设置的值是在不同大小的数组中时,如何有条件地重写数组的一部分?

时间:2016-11-16 10:23:02

标签: python arrays numpy

假设我有三个阵列:

A[size1] of {0..size1}
B[size2] of {0..size1}
C[size2] of boolean

我想要的是什么:

for (int e = 0; e < size2; ++e) :
    if C[e] == some_condition, then B[e] = A[B[e]]

由于Python很慢,我必须通过数组上的numpy算法来实现它。我怎么能这样做?

示例:

A = np.array([np.random.randint(0,n,size1), np.random.randint(0,size1,size1)])
B = np.random.randint(0,size1,size2)
C = np.random.randint(0,n,size2)

#that's the part I want to do in numpy:
for i in range (size2) :
    if (C[i] > A[0][B[i]]) : 
        B[i] = A[1][B[i]]

1 个答案:

答案 0 :(得分:5)

您只需使用boolean-indexing -

即可
mask = C > A[0][B] # Create mask to select valid ones from B
B[mask] = A[1][B[mask]] # Use mask to select and assign values