我有两个数组,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))
我需要获得第三个数组,其中:
- 长度与其他长度相同。
- firstvalue(1.3):第一个数组的第一个非nan值。
- secondvalue(2.3):是第二个数组中比第一个值(1.3)索引高的第一个无nan值。
- thirdvalue(1.6):是第一个数组中比第二个值(2.3)索引高的第二个无nan值。
- 重复步骤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]