2016-11-23 5 views
1

Какой самый производительный способ преобразовать что-то вроде этого2D список питон Numpy массивов в 2D Numpy массив

problem = [ [np.array([1,2,3]), np.array([4,5])], 
      [np.array([6,7,8]), np.array([9,10])]] 

в

desired = np.array([[1,2,3,4,5], 
        [6,7,8,9,10]]) 

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

+0

Итак, количество элем в каждом элементе списка будет таким же, как и '5' здесь? – Divakar

+0

Работает ли 'bmat'? – hpaulj

+0

Число для каждой строки одно и то же, поэтому никакое дополнение или другое не требуется. – macmallow

ответ

1

Я думаю, что это:

print np.array([np.hstack(i) for i in problem]) 

Используя ваш пример, это работает в 0.00022s, wherease concatenate принимает 0.00038s

Вы также можете использовать apply_along_axis хотя этот пробег составляет 0,00024s:

print np.apply_along_axis(np.hstack, 1, problem) 
+0

Использование миллисекунд было бы яснее, я думаю, –

+0

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

+1

Посмотрите на код 'bmat' -' hstack' для каждой строки и 'vstack', чтобы присоединиться к строкам. Если список был сплющен, вы можете использовать один «concatenate», а затем изменить. Я не думаю, что разница во времени значительна. – hpaulj

5

Как об этом:

problem = [[np.array([1,2,3]), np.array([4,5])], 
     [np.array([6,7,8]), np.array([9,10])]] 

print np.array([np.concatenate(x) for x in problem]) 
Смежные вопросы