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]))
我有以下情况:
假设我有一个数组,我想在实际非空值和之前的非空值之间减去(绝对值)。
[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]))