Расширение трехмерного массива - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть трехмерный массив формы 200, 130, 131 (x, y, z).Который в основном маска файла.допустим, это называется «maskCoords».Я хочу расширить это до моей исходной формы данных 512 * 512 * 485 (x, y, z).Но сохраняя маску неизменной и заполняя остальные индексы нулями.

Итак, я создал пустой трехмерный массив, например:

 mask3d = np.zeros_like(MainData3d)

Но сейчас я не могу понять, как заполнить этот массив mask3d значениями, сохраненными в моем маскированном файле.Я пытался сделать как

mask3d[maskCoords]=1

Но это не работает. Когда я перекрываю Maindata3d и маскированные области mask3d не видны.Любая помощь или идея будут оценены.

1 Ответ

0 голосов
/ 04 февраля 2019

Я предполагаю, что ваши maskCoords - это 3d-координаты в вашем 3d-массиве с моим ответом, поскольку, как и в комментариях к вашему вопросу, трудно точно сказать, что вы имеете в виду.

Вот подход.

mask3d = np.zeros((512, 512, 485))

# Create random coordinates
maskCoords = (np.random.random((200, 130, 131)) * 400).astype('int')

# Convert the coordinates to be converted by numpy.ravel_multi_index
maskCoords2 = np.hstack((maskCoords[:, :, 0].flatten()[:, None], maskCoords[:, :, 1].flatten()[:, None], maskCoords[:, :, 2].flatten()[:, None])).T

# Convert the coordinates into indices so we can access the locations in the original array
inds = np.ravel_multi_index(maskCoords2, [512, 512, 485])

# Set the array values at the locations of the indices to 1
mask3d.flat[inds] = 1

Возможно, это не то, что вы ищете, но я все равно что-то пробую.

...