Как преобразовать список массивов numpy в один массив numpy?

Предположим, что у меня есть:

LIST = [[array([1, 2, 3, 4, 5]), array([1, 2, 3, 4, 5],[1,2,3,4,5])] # inner lists are numpy arrays

Я пытаюсь преобразовать;

array([[1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5])

Я решаю его по итерации на vstack прямо сейчас, но он очень медленный для особо большого LIST

Что вы предлагаете для наиболее эффективного способа?

Ответы

Ответ 1

В общем случае вы можете объединить целую последовательность массивов вдоль любой оси:

numpy.concatenate( LIST, axis=0 )

но вы do должны беспокоиться о форме и размерности каждого массива в списке (для двумерного вывода 5x3 вам нужно убедиться, что все они являются двумерными n-by -3 массивов уже). Если вы хотите объединить 1-мерные массивы в виде строк двумерного вывода, вам необходимо расширить их размерность.

vstack - это простое в использовании решение, потому что оно будет принимать последовательность 1- и/или 2-мерных массивов и автоматически увеличивать размерность, если необходимо, прежде чем объединить весь список вместе. В тех случаях, когда требуется новое измерение, оно добавляется слева, поэтому каждый массив n -element 1D становится массивом 1-by-n 2D. Опять же, вы можете объединить весь список сразу без необходимости итерации:

numpy.vstack( LIST )

Существует также аналогичная функция hstack для конкатенации 1- и/или 2-D массивов в качестве столбцов двумерного вывода (там, где требуется расширение, добавляется новое измерение справа, так что a n -element 1D становится двумерным массивом n -by-1).

Наконец, в конкретном случае вертикальной укладки 1-D массивов также работает:

numpy.array( LIST )

... потому что массивы могут быть построены из последовательности других массивов, добавив новое измерение в начало.