通过沿第一个轴复制/重复,从 2D 阵列创建 3D 阵列

Pab*_*Rbl 7 python arrays numpy

假设我有一个n × m数组,即:

array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.],
       [ 7.,  8.,  9.]])
Run Code Online (Sandbox Code Playgroud)

我要生成一个 3D 数组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.]]])
Run Code Online (Sandbox Code Playgroud)

我怎么才能得到它?

Div*_*kar 9

在开始时引入一个新轴并用None/np.newaxis复制它np.repeat。这应该适用于将任何n暗淡阵列扩展到n+1暗淡阵列。实施将是 -

np.repeat(arr[None,...],k,axis=0)
Run Code Online (Sandbox Code Playgroud)

样品运行 -

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.]]])
Run Code Online (Sandbox Code Playgroud)

View-output 为了记忆效率

我们还可以生成3D视图并使用np.broadcast_to. 更多信息 - here。因此,简单地做 -

np.broadcast_to(arr,(3,)+arr.shape) # repeat 3 times
Run Code Online (Sandbox Code Playgroud)