2013-04-10 5 views
2

Еще один вопрос по обработке массива: У меня есть ок. 20003 записей numpy массив с фиксированным размером (который я знаю), содержащий целые числа. Я хочу поместить массив с другим целым числом, чтобы он был окружен всеми измерениями. Это целое число фиксировано для всего процесса заполнения.Заполнение больших массивов numpy

example (2D) 
1----->000 
     010 
     000 

У меня есть две идеи, что приводит к такому результату:

  1. Создание большего Numpy массива, содержащего проложенные значения и «нарезки» старую область в проложенный:

    padded=np.zeros((z+2,x+2,y+2)) 
    padded[1:z+1,1:x+1,1:y+1]=olddata 
    
  2. Использование np.insert или hstack, vstack, dstack для добавления значений:

    padded=np.insert(data,0,0,axis=0) 
    padded=np.insert(data,x+1,0,axis=0) etc. 
    

Проблема заключается в том, что все эти методы не являются на месте и выделяют новый массив (1.) или копируют старый (2.). Есть ли способ сделать заполнение на месте? Я знаю, что с numpy 1.7. есть модуль numpy.pad. Но это также, по-видимому, использует какое-то распределение и переопределение (как, например, по-моему).

+0

Не могли бы вы работать с заполненным массивом? –

+0

@JanneKarila: Я не знаю, как начать с заполненного массива? У меня есть rawdata, и в какой-то момент мне приходится его заполнять или нет? – Dschoni

+1

Как вы получаете необработанные данные в массив NumPy? Возможно, вы могли бы прочитать его в кусочек внутри прокладки в этот момент. –

ответ

1

Вы не можете добавить отступы на место, потому что в макете памяти нет места. Вы можете пойти другим путем: сначала назначьте заполненный массив и используйте представление в нем при доступе к незакрепленным данным.

padded = np.empty((2002,2002,2002)) 
padded[0] = 0 
padded[-1] = 0 
padded[:,0] = 0 
padded[:,-1] = 0 
padded[:,:,0] = 0 
padded[:,:,-1] = 0 

unpadded = padded[1:-1, 1:-1, 1:-1] 
Смежные вопросы