numpy - 在实际值和前一个值之间减去数组(仅不为空)

numpy - Subtract array between actual value and previous value (only not null)

我有以下情况:

假设我有一个数组,我想在实际非空值和之前的非空值之间减去(绝对值)。

[np.nan, np.nan, 10, np.nan, np.nan, 5, np.nan, 3, 6, np.nan, np.nan, 7]

预期输出:

[nan, nan, nan, nan, nan, 5, nan, 2, 3, nan, nan, 1]

在没有 for 循环的情况下使用 numpy 获得此结果的好方法是什么?

我只用for循环解决了它:

x = [np.nan, np.nan, 10, np.nan, np.nan, 5, np.nan, 3, 6, np.nan, np.nan, 7]
idx = np.where(~np.isnan(x))[0]
output = np.full(len(x), np.nan)

for i, j in enumerate(idx):
  if i > 0:
   output[j] = abs(x[idx[i]] - x[idx[i - 1]])

您已经完成了大部分的路程:

output[idx[1:]] = np.abs(np.diff(x[idx]))