разверните массив numy в n измерениях - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь «расширить» массив (создать новый массив с пропорционально большим количеством элементов во всех измерениях).У меня есть массив с известными числами (назовем его X), и я хочу увеличить его в j раза (в каждом измерении).

До сих пор я генерировал новый массив нулей с большим количеством элементовзатем я использовал трансляцию для вставки исходных чисел в новый массив (с фиксированными интервалами).

Наконец, я использовал linspace, чтобы заполнить пробелы, но эта часть на самом деле не имеет прямого отношения к вопросу.

Код, который я использовал (для n = 3):

import numpy as np
new_shape = (np.array(X.shape) - 1 ) * ratio + 1
new_array = np.zeros(shape=new_shape)
new_array[::ratio,::ratio,::ratio] = X

Моя проблема в том, что это не является общим, мне придется изменить третью строку на основе ndim.Есть ли способ использовать такое вещание для любого количества измерений в моем массиве?

Правка: если быть более точным, третья строка должна быть:

new_array[::ratio,::ratio] = X

if ndim =2 или

new_array[::ratio,::ratio,::ratio,::ratio] = X

, если ndim = 4

и т. Д.и т. д. Я хочу избежать написания кода для каждого случая ndim

ps. Если есть лучший инструмент для выполнения всего процесса (такой как «внутреннее заполнение», о котором я не знаю, я будубудьте счастливы узнать об этом).

Спасибо

Ответы [ 3 ]

2 голосов
/ 25 марта 2019

Вы можете использовать slice запись -

slicer = tuple(slice(None,None,ratio) for i in range(X.ndim))
new_array[slicer] = X
2 голосов
/ 25 марта 2019

Создайте кортеж для нарезки вручную.::ratio эквивалентно slice(None, None, ratio):

new_array[(slice(None, None, ratio),)*new_array.ndim] = ...
2 голосов
/ 25 марта 2019

array = array[..., np.newaxis] добавит другое измерение

Эта статья может помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...