假设我有一个n × m数组,即:
n × m
array([[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.]])
然后我要生成一个3D数组k × n × m,其中新轴上的所有数组都相等,即:相同的数组,但是now 3 × 3 × 3。
k × n × m
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暗淡数组。实施将是-
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 提高记忆效率
View-output
我们还可以使用生成3D视图并实现几乎免费的运行时np.broadcast_to。因此,只需-
3D
np.broadcast_to
np.broadcast_to(arr,(3,)+arr.shape) # repeat 3 times