如何通过将 NaN 添加到较小的数组来匹配两个数组?

How to match two arrays by adding NaNs to the smaller array?

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

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 格式的最快方法是什么。

谢谢,

这个怎么样,虽然不漂亮,但也够用了。

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)

使用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.
  • 获取