首页 > 解决方案 > 使用 tile 从二维数组构造 3 维数组

问题描述

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

我想收缩以下形状的promo_class.shape数组(2,3,3)

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

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

知道如何用 np.tile函数做到这一点吗?

标签: pythonnumpy

解决方案


只需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.]]])

推荐阅读