【问题标题】:How to match two arrays by adding NaNs to the smaller array?如何通过将 NaN 添加到较小的数组来匹配两个数组?
【发布时间】:2020-10-11 21:45:29
【问题描述】:

我必须绘制一组数组。然而,我产生这些数组的方式是有意义的。例如,

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

但我需要将 x 修改为这种格式:np.array([2, 4, NaN, NaN, NaN, 5, NaN]) 才能绘制它们。由于我有大量此类案例,第二个数组在任意位置包含 NaN,我想知道通过添加必要的 NaN 将 x 转换为 y 格式的最快方法是什么。

谢谢,

【问题讨论】:

    标签: arrays python-3.x list sorting nan


    【解决方案1】:

    一种使用numpy.resize的方式:

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

    输出:

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

    解释:

    • numpy.resize:重复输入数组(x)以匹配目标y的长度(即y.shape[0]
    • y/y:产生 1 (int/int) 或 np.nan (anything/np.nan) 来制作映射数组。
    • resized_arr * (y/y):基本上从调整大小的x 中提取数字。由于将任何数字与nan 相乘得到nan,因此此步骤确保最终数组在必要时具有nan,否则从x 中获取。

    【讨论】:

    • 这是一个不错的解决方案。你能解释一下这段代码是如何工作的吗?
    • 是的,Rishav 是对的。我需要一些解释,因为这似乎是迄今为止最短的。
    • @Rishav 我添加了一些见解。如果有任何不清楚的地方,请告诉我;)
    【解决方案2】:

    这个怎么样,不漂亮,但可以。

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2021-04-07
      • 2019-11-03
      • 1970-01-01
      相关资源
      最近更新 更多