【问题标题】:Concatenate NumPy 2D array with column (1D array)将 NumPy 二维数组与列连接(一维数组)
【发布时间】:2019-08-19 21:15:16
【问题描述】:

假设我有一个 2D NumPy 数组 values。我想向它添加新列。新列应为values[:, 19],但滞后一个样本(第一个元素等于零)。它可以返回为np.append([0], values[0:-2:1, 19])。我试过了:Numpy concatenate 2D arrays with 1D array

temp = np.append([0], [values[1:-2:1, 19]])
values = np.append(dataset.values, temp[:, None], axis=1)

但我明白了:

ValueError: all the input array dimensions except for the concatenation axis 
must match exactly

我也尝试使用c_ 作为:

temp = np.append([0], [values[1:-2:1, 19]])
values = np.c_[values, temp]

但效果是一样的。如何进行这种连接。我认为问题出在temp 方向 - 它被视为行而不是列,因此存在尺寸问题。在 Octave '(转置运算符)中可以解决问题。也许 NumPy 有类似的解决方案?

无论如何,谢谢你的时间。

最好的问候,
最大

【问题讨论】:

  • 如果 temp 是形状 (n,) (1d),您可以使用 temp[:,None]temp.reshape(n,1) 创建一个二维“列”。然后可以是concatenate,在轴=1 上具有二维(n,m)数组。与 Octave 的主要区别在于 numpy 数组可以是真正的 1d。

标签: python arrays numpy concatenation


【解决方案1】:
In [76]: values = np.arange(16).reshape(4,4)                                                                 
In [77]: temp = np.concatenate(([0], values[1:,-1]))                                                         
In [78]: values                                                                                              
Out[78]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
In [79]: temp                                                                                                
Out[79]: array([ 0,  7, 11, 15])

这种使用concatenate 来生成temp 类似于您使用append(实际上使用concatenate)。

听起来你想以这种方式加入valuestemp

In [80]: np.concatenate((values, temp[:,None]),axis=1)                                                       
Out[80]: 
array([[ 0,  1,  2,  3,  0],
       [ 4,  5,  6,  7,  7],
       [ 8,  9, 10, 11, 11],
       [12, 13, 14, 15, 15]])

我更喜欢直接使用concatenate

【讨论】:

    【解决方案2】:

    您需要将一维数组转换为二维数组,如图所示。然后,您可以使用 vstack 或 hstack 进行整形来获得您想要的最终数组,如图所示:

    a = np.array([[1, 2, 3],[4, 5, 6]])
    b = np.array([[7, 8, 9]])
    c = np.vstack([ele for ele in [a, b]])
    print(c)
    c = np.hstack([a.reshape(1,-1) for a in [a,b]]).reshape(-1,3)
    print(c)
    

    无论哪种方式,输出都是:

    [[1 2 3] [4 5 6] [7 8 9]]
    

    希望我正确理解了这个问题

    【讨论】:

      猜你喜欢
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多