Удалить список из numpy массива и просто иметь массив - PullRequest
0 голосов
/ 20 января 2020
s = np.array([3, 1])
s_ = np.array([[3], [1]])

$ s.shape
>>> (2,)

$ s_.shape
>>> (2,1)

Как я могу удалить внутренние [] вокруг каждого значения и просто иметь одномерный массив?

В частности, если у меня есть list из s_ -подобных массивов, как я могу изменить их все, чтобы они были в shape из s? Например:

$ print(test)
>>> [array([[1], [3]]), array([[12], [5]]), ... etc.]

Ответы [ 2 ]

0 голосов
/ 21 января 2020
In [163]: s_ = np.array([[3], [1]])                                                              
In [164]: s_                                                                                     
Out[164]: 
array([[3],
       [1]])
In [165]: s_.shape                                                                               
Out[165]: (2, 1)

Множество способов превратить это в (2,) массив формы:

In [166]: s_.ravel()                                                                             
Out[166]: array([3, 1])
In [167]: s_.squeeze()                                                                           
Out[167]: array([3, 1])
In [168]: s_[:,0]                                                                                
Out[168]: array([3, 1])

In [170]: s_.reshape(2)                                                                          
Out[170]: array([3, 1])
In [171]: s_.reshape(-1)                                                                         
Out[171]: array([3, 1])

Что касается работы со списком из них, [s_, s_, s_], вы можете просто использовать понимание списка создать новый список, каждый из которых будет изменен одним из перечисленных выше методов.

Или, если они имеют одинаковую форму, их можно объединить в один массив.

Присоединить их к новое ведущее измерение:

In [172]: np.array([s_,s_,s_])                                                                   
Out[172]: 
array([[[3],
        [1]],

       [[3],
        [1]],

       [[3],
        [1]]])
In [173]: _.shape                                                                                
Out[173]: (3, 2, 1)     # could reshape to (3,2)

Присоедините их к существующему измерению размера 1:

In [175]: np.concatenate([s_,s_,s_], axis=1)                                                     
Out[175]: 
array([[3, 3, 3],
       [1, 1, 1]])
In [176]: _.shape                                                                                
Out[176]: (2, 3)

транспонируйте это:

In [177]: np.concatenate([s_,s_,s_], axis=1).T                                                   
Out[177]: 
array([[3, 1],
       [3, 1],
       [3, 1]])
0 голосов
/ 20 января 2020

Если вы хотите получить массив 1d, вы можете использовать функцию flatten ().

s_ = np.array([[3], [1]])
s_ = s_.flatten()

>>> print (s_)
[3 1]
...