通过布尔掩码高效地将源数组复制到目标数组

时间:2018-04-22 23:47:57

标签: python arrays numpy

我有一对相同大小的二维数组,源数组和目标数组。源数组也有一个相同大小的布尔数组,其中填充了True / False值的随机混合。我想要复制对应于" True"的源单元格。将布尔数组中的值放入目标数组中的等效位置,覆盖这些特定的目标值。

除了在整个源数组中慢慢循环,检查布尔数组,并覆盖目标中的各个值之外,还有更好的方法。

Sample

2 个答案:

答案 0 :(得分:2)

这是一种方式。

import numpy as np

S = np.array([[65, 44, 77],
              [25, 22, 31],
              [14, 20, 63]])

B = np.array([[1, 0, 1],
              [0, 0, 1],
              [0, 1, 0]], dtype=bool)

D = np.array([[85, 10, 20],
              [15, 12, 32],
              [66, 28, 13]])

D[B] = S[B]

结果:

array([[65, 10, 77],
       [15, 12, 31],
       [66, 20, 13]])

答案 1 :(得分:0)

不需要numpy。你可以这样做:

source_array, bool_array, destination_array = [65, 44, 77],["T", "F", "T"], [85, 10, 20]
bool_array = ["T", "F", "T"]
for index, value in enumerate(destination_array):
    if bool_array[index] == "T":
        destination_array[index] = source_array[index]
print (destination_array)

如果你想在多个数组上做同样的事情,只需将它放在一个函数中:

def transfer(source_array, bool_array, destination_array):
    for index, value in enumerate(destination_array):
        if bool_array[index] == "T":
            destination_array[index] = source_array[index]
    return destination_array

现在在您需要的所有列表上调用该函数。