小编典典

通过沿第一个轴进行复制/重复操作从2D数组创建3D数组

python

假设我有一个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.]]])

我怎么才能得到它?


阅读 232

收藏
2021-01-20

共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 提高记忆效率

我们还可以使用生成3D视图并实现几乎免费的运行时np.broadcast_to。因此,只需-

np.broadcast_to(arr,(3,)+arr.shape) # repeat 3 times
2021-01-20