【问题标题】:How to reshape an ndimensional array from shape (1600,105) to shape (1600,14,105) in python? Also how can I copy columns from one to the other?如何在python中将n维数组从形状(1600,105)重塑为形状(1600,14,105)?另外,如何将列从一个复制到另一个?
【发布时间】:2019-07-25 00:38:23
【问题描述】:

我目前有一个形状为(1600,105) 的ndim 数组,其中填充了数据。我想保持现有数据相同,但只需在中间添加一个新的零轴,从而生成形状为(1600,14,105) 的 ndarray,其中原始值保持不变。如何在 python / 使用 numpy 中执行此操作?此外,我制作了一个形状为(1600,14,105) 的零数组,但不知道如何将原始数组中的值复制到这个数组中。

我尝试添加一个新轴,但不确定如何将我当前的数组从 (1600,105) 重塑为 (1600,14,105)。我尝试使用array2 = np.zeros((1600,14,105)) 制作一个形状为零的 np 数组(1600,14,105)。现在我想将形状为(1600, 105) 的原始array1 中的值复制到新数组中的相应轴中。

array2 = np.zeros((1600,14,105))
array1.shape 
Out[1]:
  (1600, 105)

【问题讨论】:

  • array2[:,0,:] = array1 会将array1 复制到一个array2 - 只复制一份,留下13 个大小相同的“列”零。还是你想要 14 份? array2[...] = array1[:,None,:]?
  • 我尝试了这两种方法,但这并不是我想要的。想象一下我有这个 (1600,105) 数组。我想保持原样,但新尺寸为 14。
  • 如果要复制数据14次,np.repeat(a[:, None, :], 14, axis=1)。如果您只是想满足某些矢量化操作的形状约束,可能会有更好的方法来做您想做的事情。
  • 形状为 (1600,14,105) 的数组大 14 倍。它要么必须大部分为零,要么重复。
  • 也许你应该添加一个例子

标签: python numpy multidimensional-array numpy-ndarray


【解决方案1】:

我想也许您正在寻找的是在末尾而不是中间添加一个维度。有两种方法可以做到这一点:

要么新维度主要包含零(或您想要的任何值):

array2 = np.zeros((1600,105,14))
array2[:, :, 0] = array1

或者它包含原始数组的重复:

array2 = np.zeros((1600,105,14))
array2[:, :, :] = np.expand_dims(array1, 2)

【讨论】:

    【解决方案2】:
    In [25]: arr = np.arange(1,13).reshape(3,4)                                                                  
    In [26]: arr                                                                                                 
    Out[26]: 
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12]])
    

    一个添加了尺寸为 2 的新数组:

    In [28]: arr2 = np.zeros((3,2,4),int)                                                                        
    In [29]: arr2                                                                                                
    Out[29]: 
    array([[[0, 0, 0, 0],
            [0, 0, 0, 0]],
    
           [[0, 0, 0, 0],
            [0, 0, 0, 0]],
    
           [[0, 0, 0, 0],
            [0, 0, 0, 0]]])
    

    一份:

    In [30]: arr2[:,0,:] = arr                                                                                   
    In [31]: arr2                                                                                                
    Out[31]: 
    array([[[ 1,  2,  3,  4],
            [ 0,  0,  0,  0]],
    
           [[ 5,  6,  7,  8],
            [ 0,  0,  0,  0]],
    
           [[ 9, 10, 11, 12],
            [ 0,  0,  0,  0]]])
    

    两份:

    In [32]: arr2[...] = arr[:,None,:]                                                                           
    In [33]: arr2                                                                                                
    Out[33]: 
    array([[[ 1,  2,  3,  4],
            [ 1,  2,  3,  4]],
    
           [[ 5,  6,  7,  8],
            [ 5,  6,  7,  8]],
    
           [[ 9, 10, 11, 12],
            [ 9, 10, 11, 12]]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 2017-01-02
      • 2021-10-08
      • 2011-07-01
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      相关资源
      最近更新 更多