2016-01-14 1 views
1

У меня есть список «Z» с:Python конкатенация различные массивы размера, хранящиеся в списке

import numpy as np 
z[0] = np.random.normal(0, 1, (500, 20)) 
z[1] = np.random.normal(0, 1, (500, 30)) 

Есть около 100 массивов в списке. Для иллюстрации я использую только список размером 2. Хранящиеся массивы все размерностей 0 500

Я хочу добиться:

C = np.concatenate((z[0] , z[1]),1) 

Я пробовал:

z1 = [ np.concatenate(z[ii], 1) for ii in range(0,len(z)) ] 

, но она по-прежнему возвращает исходный список и не сцепить хранимые массивы

ответ

2

Конкатенация для многомерных массивов несколько не определена, без указания оси, по которой можно конкатенатировать. Я предполагаю, что вы хотите штабелировать свои массивы по горизонтали, потому что количество строк одинаково для обоих. Самый простой вызов

stacked = np.hstack(Z) 

, который конкатенации вдоль оси 1. Вы можете найти документацию here.

В целом, вы можете также использовать

stacked = np.concatenate(Z, axis=1) 

, который работает для многомерных массивов, тоже. Соответствующая документация - here.

+0

Да, ответ обновлен. –

1

Я был в замешательстве от мелочей, но теперь я вижу, что вы просили. У вас просто есть понимание списка наизнанку.

Вместо

z1 = [ np.concatenate(z[ii], 1) for ii in range(0,len(z)) ] 

Вы хотите

z1 = np.concatenate((z[ii] for ii in range(0, len(z)), 1) 

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

+1

Вы также можете просто передать 'z', а не обернуть его в итераторе. –

+0

@TillHoffmann Nice - я ужасно незнакома с Numpy, только несколько раз использовал его в колледже. –

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

  • Нет связанных вопросов^_^