代码之家  ›  专栏  ›  技术社区  ›  Rebel

如何通过在较小的列表中添加nan来匹配两个列表?

  •  0
  • Rebel  · 技术社区  · 4 年前

    我得画一组数组。但是,我生成这些数组的方式是有意义的。例如,

    x = np.array([2, 4, 5])
    y = np.array([14, 15, NaN, NaN, NaN, 16, NaN])
    

    但我需要修改 np.array([2, 4, NaN, NaN, NaN, 5, NaN]) 然后才能画出他们。由于第二个数组在任意位置包含nan,因此我想知道通过添加必要的nan将x转换为y格式的最快方法是什么。

    谢谢您,

    0 回复  |  直到 4 年前
        1
  •  2
  •   Chris    4 年前

    单向使用 numpy.resize :

    np.resize(x, y.shape[0])*(y/y)
    

    array([ 2.,  4., nan, nan, nan,  5., nan])
    

    说明:

    • numpy.调整大小 x )匹配目标的长度 y (即。 y.shape[0] )
    • y/y int / )或者 np.nan (什么都可以/ np.nan公司 )生成映射数组。
    • resized_arr * (y/y) :基本上从调整大小的 在可能的地方。因为任何数乘以 nan 产量 ,此步骤确保最终数组具有 .
        2
  •  1
  •   Lewis Morris    4 年前

    这个怎么样,不漂亮,但很管用。

    def add_nans(x,y):
        lst = []
        index = 0
        for val in y:
            if np.isnan(val):
                lst.append(np.nan)
            else:
                lst.append(x[index])
                index +=1
    
        return np.array(lst)
    
    x = np.array([2, 4, 5])
    y = np.array([14, 15, NaN, NaN, NaN, 16, NaN])  
    
    x_changed = add_nans(x,y)