Как я могу повторить этот массив Numpy внутри себя? - PullRequest
1 голос
/ 06 июня 2019

У меня есть массив z из shape (8,):

>>> z
array([-30000.        , -30000.        , -30000.        , -30000.        ,
       -27703.12304688, -27703.15429688, -27703.70703125, -27703.67382812])

Я хотел бы скопировать значения еще 7 раз, сохраняя их позиции, чтобы создать array zr из shape (8,8) например ::

    >>> z
    array([-30000.        , -30000.        , -30000.        , -30000.        ,
           -27703.12304688, -27703.15429688, -27703.70703125, -27703.67382812],
          [-30000.        , -30000.        , -30000.        , -30000.        ,
           -27703.12304688, -27703.15429688, -27703.70703125, -27703.67382812]
            .........)

Я попробовал np.repeat (), но это создает массив shape (64,), и я хотел бы (8,8).

>>> zr = np.repeat(z, 8)
>>> zr
array([-30000.        , -30000.        , -30000.        , -30000.        ,
       -30000.        , -30000.        , -30000.        , -30000.        ,
       -30000.        , -30000.        , -30000.        , -30000.        ,
       -30000.        , -30000.        , -30000.        , -30000.        ,
       -30000.        , -30000.        , -30000.        , -30000.        ,
       -30000.        , -30000.        , -30000.        , -30000.        ,
       -30000.        , -30000.        , -30000.        , -30000.        ,
       -30000.        , -30000.        , -30000.        , -30000.        ,
       -27703.12304688, -27703.12304688, -27703.12304688, -27703.12304688,
       -27703.12304688, -27703.12304688, -27703.12304688, -27703.12304688,
       -27703.15429688, -27703.15429688, -27703.15429688, -27703.15429688,
       -27703.15429688, -27703.15429688, -27703.15429688, -27703.15429688,
       -27703.70703125, -27703.70703125, -27703.70703125, -27703.70703125,
       -27703.70703125, -27703.70703125, -27703.70703125, -27703.70703125,
       -27703.67382812, -27703.67382812, -27703.67382812, -27703.67382812,
       -27703.67382812, -27703.67382812, -27703.67382812, -27703.67382812])
>>> zr.shape
(64,)

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 06 июня 2019

Используйте np.tile со списком для возврата 2D-массива:

# tile improvement courtesy OP
np.tile(z, [8, 1])

Если вы хотите просматривать только для чтения, np.broadcast_to довольно быстро:

np.broadcast_to(z, (8,)+z.shape)
0 голосов
/ 06 июня 2019
In [278]: z = np.arange(4)   

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

In [280]: np.repeat(z,4)                                                                               
Out[280]: array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3])

, но его можно вписать в нужный массив:

In [281]: np.repeat(z,4).reshape(4,4)                                                                  
Out[281]: 
array([[0, 0, 0, 0],
       [1, 1, 1, 1],
       [2, 2, 2, 2],
       [3, 3, 3, 3]])
In [282]: np.repeat(z,4).reshape(4,4).T                                                                
Out[282]: 
array([[0, 1, 2, 3],
       [0, 1, 2, 3],
       [0, 1, 2, 3],
       [0, 1, 2, 3]])

Если z равен (1, n), тогда мы можем повторить на первой оси:

In [283]: np.repeat(z[None,:],4,0)                                                                     
Out[283]: 
array([[0, 1, 2, 3],
       [0, 1, 2, 3],
       [0, 1, 2, 3],
       [0, 1, 2, 3]])

np.tile может быть проще в использовании.Внутренне он использует repeat.

0 голосов
/ 06 июня 2019

Вы можете попробовать это

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