Я довольно новичок в программировании в целом, но я не мог понять эту проблему до сих пор.
У меня есть двумерный массив NumPy mask
, скажем, mask.shape is (3800,3500)
, который заполнен 0 и 1, представляющими пространственное разрешение 2D-изображения, где 1 представляет видимый пиксель, а 0представляет фон.
У меня есть второй двумерный массив data
из data.shape is (909,x)
, где x
- это ровно 1 единица в первом массиве.Теперь я хочу заменить каждую 1 в первом массиве вектором длины 909
из второго массива.В результате получается окончательный трехмерный массив shape(3800,3500,909)
, который в основном представляет собой двумерное изображение x x y, где выбранные пиксели имеют спектр значений 909 в направлении z.
Я пытался
mask_vector = mask.flatten
ones = np.ones((909,1))
mask_909 = mask_vector.dot(ones) #results in a 13300000 by 909 2d array
count = 0
for i in mask_vector:
if i == 1:
mask_909[i,:] = data[:,count]
count += 1
result = mask_909.reshape((3800,3500,909))
Этов результате получается жизнеспособный трехмерный массив, дающий двухмерное изображение при выполнении plt.imshow(result.mean(axis=2))
Но значения по-прежнему равны только 1 с и 0 с, а не требуемыми спектральными данными в направлении z.Я также пытался использовать np.where
, но трансляция не удалась, поскольку два 2D-массива имеют явно разные формы.
Кто-нибудь получил решение?Я уверен, что должен быть легкий путь ...