通过沿第一个轴进行复制/重复操作从2D数组创建3D数组
假设我有一个n × m
数组,即:
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]])
然后我要生成一个3D数组k × n × m
,其中新轴上的所有数组都相等,即:相同的数组,但是now 3 × 3 × 3
。
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]],
[[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]],
[[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]]])
我怎么才能得到它?
-
从开始引入一个新轴,并与一起
None/np.newaxis
复制np.repeat
。这应该适用于将任何n
暗淡数组扩展为n+1
暗淡数组。实施将是-np.repeat(arr[None,...],k,axis=0)
样品运行-
In [143]: arr Out[143]: array([[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.]]) In [144]: np.repeat(arr[None,...],3,axis=0) Out[144]: array([[[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.]], [[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.]], [[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.]]])
View-output
提高记忆效率我们还可以使用生成
3D
视图并实现几乎免费的运行时np.broadcast_to
。更多信息-
here
。因此,只需-np.broadcast_to(arr,(3,)+arr.shape) # repeat 3 times