我如何在数组中重复这个numpy数组?

2024-10-01 15:31:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个z数组shape(8,)

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

我想再复制7次值,同时保持它们的位置,以创建arrayzrshape(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.重复()但这会创建一个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,)

我做错什么了?你知道吗


Tags: np数组arrayrepeatshapezr次值arrayzr
3条回答

^{}与列表一起使用可返回二维数组:

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

如果您想要只读视图,^{}非常快:

np.broadcast_to(z, (8,)+z.shape)
In [278]: z = np.arange(4)   

没有axis的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。你知道吗

你可以试试这个

np.tile(z,8).reshape(8,8)

相关问题 更多 >

    热门问题