2015-09-17 2 views
3

У меня есть несколько Numpy массивов, и я хочу, чтобы прочитать их и объединить их все вместе:нагрузки и сцепить Numpy массивы

Для загрузки файлов я сделал следующее:

import numpy as np 
AVERAGE_files = glob.glob('*AVERAGE*') 
for AV in AVERAGE_files: 
    x = np.load(AV) 

Теперь для конкатенации Я знаю, что мне нужно использовать функцию np.concatenate, но я не знаю, как начать конкатенацию. Должен ли я объявлять массив np.zeros вне цикла?

+0

FYI, как правило, NumPy импортируется как нп, а не NUM –

+0

Что форма этих массивов? – hpaulj

+0

@hpaulj форма (1,) – CatarinaCM

ответ

3

Несомненно, что-то вроде этого?

import numpy as np 

new = np.array([]) 

for AV in AVERAGE_files: 
    x = np.load(AV) # I assume num in your example is an alias for numpy? 
    new = np.concatenate([new,x]) 
+1

Немного коррекция: new = np.concatenate ([new, x]) Спасибо. Я новичок в python-скриптах – CatarinaCM

+0

Вы правы, отредактированы соответствующим образом. Удачи. – areuexperienced

+0

Это работает только в том случае, если 'x' всего 1d. – hpaulj

2

Если у вас уже есть отдельные массивы загружаются как x1, x2, x3, вы можете использовать

x = numpy.vstack((x1, x2, x3)) 

, но это, вероятно, более эффективно использовать что-то вроде @ areuexperienced-х техники конкатенации, так как вы не держите индивидуальную x1 s.

+0

В таймингах, которые я делал в прошлом, одна конкатенация по всему списку быстрее. Инкрементный подход не спасет память. – hpaulj

1

Невозможно добавить массивы с цифрами, только скопированные. Таким образом, np.concatenate приводит к массиву , который идентичен старому, за исключением дополнительных значений. Построение массива путем последовательной конкатенации, безусловно, возможно, не является эффективным подходом.

Если размер файлов известен вы почти наверняка лучше выделить массив с np.zeros из цикла, как вы предлагаете:

import numpy as np 
array = np.zeros([size]) 
for i in range(0,len(AVERAGE_files)): 
    with open(AVERAGE_files[i]) as f: #assuming AV are strings? 
     array[i] = map(float,f)  

В качестве альтернативы вы можете создать список (который может быть добавлен к эффективно), а затем преобразовать его в массив в конце:

import numpy as np 
array = np.asarray([map(float,open(AV)) for AV in AVERAGE_files]) 
Смежные вопросы