Я пытаюсь сделать что-то вроде замаскированной трансляции, когда транслируются только определенные значения.
Предположим, у меня есть один больший массив, big_array, и один меньший массив, small_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]
также бесполезен, так как это сглаживает массив, делая вещание несовместимым.
Возможно, есть какой-то другой способ добиться того же эффекта?