我有一个数组arr = np.array([0.0, 0.0, 1.0])

我想收缩以下形状为promo_class.shape的数组

我想创建形状为(2,3,3)的重复数组

array([[[0., 0., 1.],
        [0., 0., 1.],
        [0., 0., 1.]],
       [[0., 0., 1.],
        [0., 0., 1.],
        [0., 0., 1.]]])


知道如何使用(2,3,3)函数吗?

最佳答案

只需将np.broadcast_to用作view-

In [142]: arr = np.array([0.0, 0.0, 1.0])

In [144]: np.broadcast_to(arr,(2,3,3))
Out[144]:
array([[[0., 0., 1.],
        [0., 0., 1.],
        [0., 0., 1.]],

       [[0., 0., 1.],
        [0., 0., 1.],
        [0., 0., 1.]]])


为什么要使用view

因为是视图,所以它没有额外的内存开销,因此实际上在运行时是免费的-

In [148]: arr = np.random.rand(300)

In [149]: %timeit np.broadcast_to(arr,(200,300,300))
100000 loops, best of 3: 3.13 µs per loop


如果需要具有自己的存储空间的输出,请附加.copy()



如果您致力于np.tile-

In [174]: np.tile(arr,(2,3,1))
Out[174]:
array([[[0., 0., 1.],
        [0., 0., 1.],
        [0., 0., 1.]],

       [[0., 0., 1.],
        [0., 0., 1.],
        [0., 0., 1.]]])

10-06 04:03
查看更多