2015-04-02 3 views
0

Я пытаюсь объединить набор массивов numpy, загруженных с диска. Все массивы имеют различное количество столбцов.Numpy Concatenate для пустого массива

Это мой код

import numpy as np 

FILE_LIST = ["matrix a", "matrix b"] 

result=np.array([[0,0],[0,0]]) # I need to avoid this zero matrix 
for fileName in FILE_LIST: 
    matrix = matrix= np.genfromtxt(fileName, delimiter=" ")  
    result = np.concatenate((result, matrix),axis=1) 

print result 

Здесь я инициализирован результат в массив нулями, как я не могу сцепить пустой массив. Мне нужно избегать этого нулевого массива, добавленного в начале результата. Как достичь этого?

ответ

2

Я бы рекомендовал сначала загрузить все данные в массиве, а затем применить numpys hstack для того, чтобы горизонтально укладывают массивы

result = np.hstack([np.genfromtxt(fileName,delimiter=" ") for fileName in FILE_LIST]) 
+0

прекрасный ... !!! Спасибо вам большое за это. – Erdnase

0

Это не очевидно, почему вы должны избежать этого. Но вы могли бы сделать:

result=None 
for fileName in FILE_LIST: 
    matrix= np.genfromtxt(fileName, delimiter=" ") 
    if result is None: 
     result = matrix 
    else: 
     result = np.concatenate((result, matrix),axis=1) 

Обычно мы пытаемся избежать повторной конкатенации (или добавить) в массивы, желаемой вместо того, чтобы добавить к спискам. Но в этом случае genfromtxt - достаточно большая операция, которая не имеет большого значения, как вы объединяете массивы.

со списком, то цикл будет:

result=[] 
for fileName in FILE_LIST: 
    result.append(np.genfromtxt(fileName, delimiter=" "))  
result = np.concatenate(result,axis=1) 

список понимание сути то же самое.

Смежные вопросы