首先获取考虑到索引位置的两个数组的no nan出现



我有两个数组,arr1和arr2,长度相同,包含随机的nan和数字。

arr1 = np.array((1.3, -1.2, -0.2, 1.6, np.nan, np.nan, np.nan))
arr2 = np.array((-0.6, np.nan, 2.3, np.nan, -2.4, np.nan, 1.2))

我需要获得第三个数组,其中:

  1. 长度与其他长度相同。
  2. firstvalue(1.3):第一个数组的第一个非nan值。
  3. secondvalue(2.3):是第二个数组中比第一个值(1.3)索引高的第一个无nan值。
  4. thirdvalue(1.6):是第一个数组中比第二个值(2.3)索引高的第二个无nan值。
  5. 重复步骤3和4,直到数组结束。

在第三个数组结果下面:

result = np.array((1.3, np.nan, 2.3, 1.6, -2.4, np.nan, np.nan))

我认为在这种情况下,for循环并不是太糟糕(而且似乎不可避免):

arrs = [arr1, arr2]
out = [0.0] * len(arr1)
# indicate which array we are working on
curr_arr = 0
for i in range(len(arr1)):
# copy the current head element to `out`
out[i] = arrs[curr_arr][i]
# if the current element is not nan
# switch the active array
if not np.isnan(out[i]):
curr_arr = 1 - curr_arr

输出:

[1.3, nan, 2.3, 1.6, -2.4, nan, nan]

最新更新