Пространственная двумерная пространственная маска, которая должна быть заполнена конкретными значениями из двумерного массива для формирования трехмерной структуры - PullRequest
0 голосов
/ 20 мая 2018

Я довольно новичок в программировании в целом, но я не мог понять эту проблему до сих пор.

У меня есть двумерный массив 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-массива имеют явно разные формы.
Кто-нибудь получил решение?Я уверен, что должен быть легкий путь ...

1 Ответ

0 голосов
/ 20 мая 2018

По сути, вам просто нужно использовать np.where, чтобы найти 1 в вашем массиве mask.Затем инициализируйте массив result в ноль и замените третье измерение данными, используя выходные данные np.where:

import numpy as np

m, n, k = 380, 350, 91
mask = np.round(np.random.rand(m, n))
x = np.sum(mask == 1)
data = np.random.rand(k, x)

result = np.zeros((m, n, k))
row, col = np.where(mask == 1)
result[row,col] = data.transpose()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...