Объединить один ndarray в определенных позициях - PullRequest
0 голосов
/ 16 января 2020

Я только что узнал python Я хочу спросить о Ndarray numpy

Например, у меня есть

a = np.array([3, 2, 3, 9])

как дублировать a используя цикл желаемый как это

array([[3, 3, 3],
       [2, 2, 2],
       [3, 3, 3],
       [9, 9, 9]])

я пытался

import numpy as np

a = np.array([3, 2, 3, 9])
k = 3

for i in range(k):
    z = np.concatenate((a, a), axis=0)

print(z)

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Множество способов сделать это. Для учащегося все они поучительны.

Предложенный в другом ответе broadcasating должен быть быстрым, но может быть немного сложным для понимания.

после вашего составного запроса:

In [301]: a = np.array([3, 2, 3, 9])                                                             
In [302]: np.concatenate([a,a,a])                                                                
Out[302]: array([3, 2, 3, 9, 3, 2, 3, 9, 3, 2, 3, 9])
In [303]: np.concatenate([a,a,a]).reshape(3,4)                                                   
Out[303]: 
array([[3, 2, 3, 9],
       [3, 2, 3, 9],
       [3, 2, 3, 9]])
In [304]: np.concatenate([a,a,a]).reshape(3,4).T                                                 
Out[304]: 
array([[3, 3, 3],
       [2, 2, 2],
       [3, 3, 3],
       [9, 9, 9]])

Или, поскольку вы хотите расположить значения по вертикали:

In [306]: a[:,None]                                                                              
Out[306]: 
array([[3],
       [2],
       [3],
       [9]])
In [307]: a[:,None].repeat(3,1)                                                                  
Out[307]: 
array([[3, 3, 3],
       [2, 2, 2],
       [3, 3, 3],
       [9, 9, 9]])

другим способом:

In [308]: np.outer(a,np.ones(3,int))                                                             
Out[308]: 
array([[3, 3, 3],
       [2, 2, 2],
       [3, 3, 3],
       [9, 9, 9]])

или выполните внешнее преобразование с помощью широковещания:

In [309]: a[:,None]*np.ones(3,int)                                                               
Out[309]: 
array([[3, 3, 3],
       [2, 2, 2],
       [3, 3, 3],
       [9, 9, 9]])

С повторением списка:

In [311]: np.concatenate([a[:,None]]*3, axis=1)                                                  
Out[311]: 
array([[3, 3, 3],
       [2, 2, 2],
       [3, 3, 3],
       [9, 9, 9]])
0 голосов
/ 16 января 2020

Попробуйте с broadcast_to:

import numpy as np

a = np.array([3, 2, 3, 9])
k = 3
print(np.broadcast_to(a, (k, 4)).T)
# array([[3, 3, 3],
#        [2, 2, 2],
#        [3, 3, 3],
#        [9, 9, 9]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...