Преобразовать гетерогенный массив Numpy в однородный - PullRequest
0 голосов
/ 28 сентября 2018

Приведен массив noo с массивом разнородных элементов.Как преобразовать однородный фрагмент в массив с несколькими измерениями вместо странного массива с вложенными объектами?Пример:

foo = np.array([[[1,2,3],[1,2]],[[3,4,5],[3,4]]])
bar = foo[:,0]
bar.shape
Out[9]: (2,)

Я ожидал, что бар будет иметь форму (2,3), но вместо этого я получу 2 вложенных объекта.Как мне получить эквивалент этого:

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

?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

В дополнение к ответу hpaulj, последнее, что нужно сделать:

np.stack(foo[:,0])

(2, 3) для формы

0 голосов
/ 28 сентября 2018

foo является массивом объекта dtype, потому что размер подсписков различается:

In [10]: foo = np.array([[[1,2,3],[1,2]],[[3,4,5],[3,4]]])         
In [11]: foo                                                                                                            
Out[11]: 
array([[list([1, 2, 3]), list([1, 2])],
       [list([3, 4, 5]), list([3, 4])]], dtype=object)                                                                                                                                                                 
In [12]: foo.shape                                                                                                      
Out[12]: (2, 2)

Поскольку это (2,2), вы можете выбрать столбец, но он все равно будет объектом dtype:

In [13]: foo[:,0]                                                                                                       
Out[13]: array([list([1, 2, 3]), list([3, 4, 5])], dtype=object)

Но некоторые версии concatenate могут объединять эти списки в новый массив.stack хорошо работает здесь:

In [14]: np.stack(foo[:,0])                                                                                             
Out[14]: 
array([[1, 2, 3],
       [3, 4, 5]])

np.vstack также будет работать.np.array не изменяет объект dtype.

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