Преобразование списка массивов numpy в один массив int

1

У меня есть список массивов numpy, которые я хочу преобразовать в один массив int numpy.
Например, если у меня есть 46 массивов 4 x 4 numpy в списке размерности 2 x 23, я хочу преобразовать его в один целочисленный массив numpy размером 2 x 23 x 4 x 4. Я нашел способ сделать это, пройдя через каждый элемент и используя numpy.stack(). Есть ли лучший способ?

Теги:
arrays
numpy

2 ответа

1

Вы можете просто использовать np.asarray так

import numpy as np

list_of_lists = [[np.random.normal(0, 1, (4, 4)) for _ in range(23)] 
                 for _ in range(2)]
a = np.asarray(list_of_lists)
a.shape

Функция выведет форму списка списков для вас и создаст соответствующий массив.

0

Стек работает для меня:

In [191]: A,B,C = np.zeros((2,2),int),np.ones((2,2),int),np.arange(4).reshape(2,
     ...: 2)
In [192]: x = [[A,B,C],[C,B,A]]
In [193]: 
In [193]: x
Out[193]: 
[[array([[0, 0],
         [0, 0]]), array([[1, 1],
         [1, 1]]), array([[0, 1],
         [2, 3]])], [array([[0, 1],
         [2, 3]]), array([[1, 1],
         [1, 1]]), array([[0, 0],
         [0, 0]])]]
In [194]: np.stack(x)
Out[194]: 
array([[[[0, 0],
         [0, 0]],

        [[1, 1],
         [1, 1]],

        [[0, 1],
         [2, 3]]],


       [[[0, 1],
         [2, 3]],

        [[1, 1],
         [1, 1]],

        [[0, 0],
         [0, 0]]]])
In [195]: _.shape
Out[195]: (2, 3, 2, 2)

stack x как список из 2 элементов и применяет np.asarray к каждому.

In [198]: np.array(x[0]).shape
Out[198]: (3, 2, 2)

Затем добавляет измерение (1,3,2,2) и объединяется на первой оси.

В этом случае np.array(x) работает так же хорошо

In [201]: np.array(x).shape
Out[201]: (2, 3, 2, 2)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню