как конвертировать список массивов одного и того же размера - PullRequest
0 голосов
/ 19 февраля 2019

если я преобразую список массивов (внутренние массивы имеют одинаковую длину) в массив массивов, python преобразует его в виде матрицы со всеми элементами, соединенными вместе.Я хочу, чтобы он всегда оставался массивом массивов.Вот что происходит:

list_1 = [[np.array([1,2,3]),np.array([4,5,6])]]

>>> np.array(list_1)
array([[[1, 2, 3],
        [4, 5, 6]]])

но у меня было бы:

>>> np.array(list_1)
array([array([1, 2, 3]), array([4, 5,6])], dtype=object)

как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019
In [20]: list_1 = [[np.array([1,2,3]),np.array([4,5,6])]] 

Выделите массив dtype объекта нужного размера:

In [27]: arr = np.empty(2, object)                                              

Скопируйте значения из списка в этот массив:

In [28]: arr[:] = list_1[0]                                                     
In [29]: arr                                                                    
Out[29]: array([array([1, 2, 3]), array([4, 5, 6])], dtype=object)

Иногда трансляция вызывает проблемы с копированием такого типаи мне пришлось прибегнуть к более явной итерации:

In [30]: for i in range(2): 
    ...:     arr[i] = list_1[0][i] 

У вашего list_1 есть дополнительный набор скобок, поэтому необходимо использовать list_1[0].

Недавний вопрос, который я связал в комментарии, имеет несколько хороших ответов о том, почему np.array(list_1) обычно создает 2d (фактически 3d) массив.

0 голосов
/ 19 февраля 2019
list_1 = [[np.array([1,2,3]),np.array([4,5,6])]]
l = np.array(list_1)
print(l.tolist())

результат:

[[[1, 2, 3], [4, 5, 6]]]

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