我正在尝试按照屏蔽广播的方式做一些事情,其中只广播某些值。
假设我有一个更大的数组更大的数组和一个更小的数组smaller_array:
import numpy as np
import numpy.ma as ma
bigger_array = np.zeros((4,4), dtype=np.int32)
smaller_array = np.ones((2,2), dtype=np.int32)
现在,我只想要较小数组的前三个值来替换较大数组的某个部分的值,但是掩码并没有达到我希望的效果:
masked_smaller_array = ma.masked_array(smaller_array, mask=[(0, 0), (0, 1)])
bigger_array[2:4, 2:4] = masked_smaller_array
这只是返回与常规广播相同的内容,即:
[[0 0 0 0]
[0 0 0 0]
[0 0 1 1]
[0 0 1 1]]
而不是我所希望的
[[0 0 0 0]
[0 0 0 0]
[0 0 1 1]
[0 0 1 0]]
在通过覆盖之前剥离屏蔽值
bigger_array[2:4, 2:4] = masked_smaller_array[~masked_smaller_array.mask]
也没有用,因为这会使阵列变平,使广播不兼容。
有没有其他方法可以达到同样的效果?