【问题标题】:How to make (z,x,y,1)-shape numpy array into (z,x,y,3)-shape numpy array by duplicating the last element 3 times?如何通过将最后一个元素复制 3 次将 (z,x,y,1) 形状的 numpy 数组转换为 (z,x,y,3) 形状的 numpy 数组?
【发布时间】:2020-06-13 21:46:45
【问题描述】:

我想通过复制最后一个元素将(z,x,y,1)形numpy数组变成(z,x,y,3)形numpy数组?

举个例子

import numpy as np
# The shape is (1,2,2,1) (that is z=1, x=2, y=2)
a = np.array([[[[1], [2]],[[3], [4]]]])
print(a.shape) 

# I want to make it (1,2,2,3) by duplicating the last element 3 times as follow
a = np.array([[[[1,1,1], [2,2,2]],[[3,3,3], [4,4,4]]]]) 
print(a.shape)

所以给定一个形状为(z,x,y,1) 的numpy 数组a,如何通过复制最后一个元素使其成为(z,x,y,3) numpy 数组?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    试试这个:

    def repeat_last(a, n=3):
        a.repeat(n, axis=2).reshape(*a.shape[:-1], n)
    

    【讨论】:

      【解决方案2】:

      您可以使用np.broadcast_to 进行显式广播。

      assert(a.shape[-1] == 1)  # check it really is 1 in the last dimension
      
      new_shape = a.shape[:-1] + (3,)
      
      np.broadcast_to(a, new_shape)
      

      【讨论】:

        【解决方案3】:

        你可以concatenate三个数组(都是a)沿着最后一个轴:

        np.concatenate([a]*3, axis=-1)
        

        【讨论】:

          【解决方案4】:

          NumPy 的tile 可以解决问题。您只需指明数组沿每个轴的重复次数(参数reps)。

          In [39]: import numpy as np
          
          In [40]: a = np.array([[[[1], [2]], [[3], [4]]]])
          
          In [41]: b = np.array([[[[1,1,1], [2,2,2]], [[3,3,3], [4,4,4]]]]) 
          
          In [42]: c = np.tile(a, (1, 1, 1, 3))
          
          In [43]: np.array_equal(b, c)
          Out[43]: True
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-10-22
            • 2019-09-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多