【问题标题】:Adding an extra in column into 2D numpy array python在 2D numpy 数组 python 中添加额外的列
【发布时间】:2019-05-15 02:40:06
【问题描述】:

我有一个形状为(867, 43) 的二维 numpy 数组。我的目标是添加一个额外的列(np.nan 值)作为该数组的前导列,以便形状变为(867, 44)

一个例子是:

# sub-section of array
>>> arr[:2, :5]

array([[-0.30368954,  2.8808107 ,  5.8833385 ,  8.6606045 , 11.242557  ],
       [-0.22719575,  3.0030012 ,  6.065371  ,  8.924864  , 11.561942  ]],
  dtype=float32)

会变成:

# same sub-section
>>> f[:2,:5]

array([[        nan, -0.30368954,  2.8808107 ,  5.8833385 ,  8.6606045 ],
       [        nan, -0.22719575,  3.0030012 ,  6.065371  ,  8.924864  ]],
  dtype=float32)

即随着水平尺寸增加一,值已向右移动。

【问题讨论】:

    标签: python arrays python-2.7 numpy numpy-ndarray


    【解决方案1】:

    看看stack。编辑:澄清;我正在使用broadcasting 功能沿第二维插入新轴,然后hstack 将沿零轴附加轴(hstack 的默认值为行或第一维)。

    from numpy import array, hstack, nan, newaxis
    a = array([[-0.30368954,  2.8808107 ,  5.8833385 ,  8.6606045 , 11.242557  ],
           [-0.22719575,  3.0030012 ,  6.065371  ,  8.924864  , 11.561942  ]],
      dtype=float32)
    
    tmp = ones((a.shape[0])) * nan # create nan array
    print(hstack((tmp[:, newaxis], a))) # append along zero axis 
    

    输出:

    [[        nan -0.30368954  2.88081074  5.88333845  8.66060448 11.24255657]
     [        nan -0.22719575  3.00300121  6.06537104  8.92486382 11.5619421 ]]
    

    【讨论】:

    • 行得通!但是我敢肯定会有一种方法可以做到这一点,这对于正在发生的事情来说更加清晰......我正在尝试看看我是否可以让 numpy.insert 在一行中工作,但我还没有得到它还没上班呢..
    • 为您添加了更多信息!并使用所需的 nan 数组对其进行清理。使用新轴或无。相当于在ones方法的形状中指定一个1。
    【解决方案2】:

    你可以使用np.hstack():

    import numpy as np
    
    my_arr = np.array([[-0.30368954,  2.8808107 ,  5.8833385 ,  8.6606045 , 11.242557  ],
                    [-0.22719575,  3.0030012 ,  6.065371  ,  8.924864  , 11.561942  ]])
    
    col = np.empty((my_arr.shape[0],1))
    col[:] = np.nan
    np.hstack((col, my_arr))
    

    返回:

    [[        nan -0.30368954  2.8808107   5.8833385   8.6606045  11.242557  ]
     [        nan -0.22719575  3.0030012   6.065371    8.924864   11.561942  ]]
    

    【讨论】:

      【解决方案3】:

      使用np.insert()

      >>> import numpy as np
      >>> arr
      array([[-0.30368954,  2.8808107 ,  5.8833385 ,  8.6606045 , 11.242557  ],
             [-0.22719575,  3.0030012 ,  6.065371  ,  8.924864  , 11.561942  ]],
      
      >>> arr = np.insert(arr, 0, np.nan, axis=0)
      >>> arr
      array([[        nan, -0.30368954,  2.8808107 ,  5.8833385 ,  8.6606045 , 11.242557  ],
             [        nan, -0.22719575,  3.0030012 ,  6.065371  ,  8.924864  , 11.561942  ]],
      

      【讨论】:

      • 不错!不知道插入。通常使用堆栈来处理所有这些东西。每天学习新东西
      • 没问题!您的堆栈示例将成为我的后备选项。为帮助干杯!
      猜你喜欢
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      相关资源
      最近更新 更多