Преобразовать список типизированных числовых массивов в двумерный массив или двумерный список? - PullRequest
0 голосов
/ 08 июля 2019

У меня есть список, содержащий напечатанных (float32) numpy массивов: list = [array([ 0.02741675, -0.23331268, -0.04920139, 0.2501195 ], dtype=float32), array([ 0.1675, -0.268, -0.139, 0.195 ], dtype=float32)]

Я хочу преобразовать его в 2d массив numpy.что-то вроде:

array([[ 0.02741675, -0.23331268, -0.04920139, 0.2501195 ],[ 0.1675, -0.268, -0.139, 0.195 ]], dtype=float32)

Я пытался сделать numpy.array(list), как показывают ответы на подобные вопросы на этом сайте, но это ничего не меняет, Я подозреваю, потому чточисловой массив набирается .Как это сделать?

1 Ответ

2 голосов
/ 08 июля 2019

typing не имеет к этому никакого отношения. Все массивы имеют значение dtype, даже если на дисплее не отображается.

Воссоздание вашего списка с дисплея:

In [428]: alist = [np.array([ 0.02741675, -0.23331268, -0.04920139,  0.2501195 ]), np.array([ 0.1675, -0.268,
     ...:  -0.139,  0.195 ])]                                                                                
In [429]: alist                                                                                              
Out[429]: 
[array([ 0.02741675, -0.23331268, -0.04920139,  0.2501195 ]),
 array([ 0.1675, -0.268 , -0.139 ,  0.195 ])]

Как показывают несколько комментариев, np.array, примененный к списку, создает двумерный массив:

In [430]: np.array(alist)                                                                                    
Out[430]: 
array([[ 0.02741675, -0.23331268, -0.04920139,  0.2501195 ],
       [ 0.1675    , -0.268     , -0.139     ,  0.195     ]])

np.stack делает то же самое.

In [431]: np.stack(alist)                                                                                    
Out[431]: 
array([[ 0.02741675, -0.23331268, -0.04920139,  0.2501195 ],
       [ 0.1675    , -0.268     , -0.139     ,  0.195     ]])

Иногда люди начинают с массива объектов типа dtype. В этом случае stack работает, когда np.array не работает.

Но если массивы в списке отличаются по форме, то ни один из них не будет работать.

In [432]: alist = [np.array([ 0.02741675, -0.23331268, -0.04920139,  0.2501195 ]), np.array([ 0.1675, -0.268,
     ...:  -0.139])]          # remove an element                                                                               
In [433]: np.array(alist)                                                                                    
Out[433]: 
array([array([ 0.02741675, -0.23331268, -0.04920139,  0.2501195 ]),
       array([ 0.1675, -0.268 , -0.139 ])], dtype=object)
In [434]: np.stack(alist)                                                                                    
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-434-724d9c1d0554> in <module>
----> 1 np.stack(alist)

/usr/local/lib/python3.6/dist-packages/numpy/core/shape_base.py in stack(arrays, axis, out)
    414     shapes = {arr.shape for arr in arrays}
    415     if len(shapes) != 1:
--> 416         raise ValueError('all input arrays must have the same shape')
    417 
    418     result_ndim = arrays[0].ndim + 1

ValueError: all input arrays must have the same shape
...