我有一个数组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
函数吗?
答案 0 :(得分:1)
只需将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.]]])