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

发布于 2021-01-29 14:56:27

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

我怎么才能得到它?

关注者
0
被浏览
98
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    从开始引入一个新轴,并与一起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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看