我有一对相同大小的二维数组,源数组和目标数组。源数组也有一个相同大小的布尔数组,其中填充了True / False值的随机混合。我想要复制对应于" True"的源单元格。将布尔数组中的值放入目标数组中的等效位置,覆盖这些特定的目标值。
除了在整个源数组中慢慢循环,检查布尔数组,并覆盖目标中的各个值之外,还有更好的方法。
答案 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
现在在您需要的所有列表上调用该函数。