小编Alz*_*Alz的帖子

用其前后值之间的线性插值替换 numpy 数组中的零

假设我们有一个数组a = np.array([1,2,0,4,0,5,0,0,11]),我们如何得到:

\n\n
array([ 1,  2,  3,  4,  4.5,  5,  7,  9, 11])\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试过的是:

\n\n
from scipy.interpolate import interp1d\n\na = np.array([1,2,0,4,0,5,0,0,11])\nb = a[np.nonzero(a)]\nbrange = np.arange(b.shape[0])\ninterp = interp1d(brange, b)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这似乎确实完成了寻找中间值的实际工作。例如:

\n\n
print (interp(1), interp(1.5), interp(2), interp(2.5), interp(3))\n#out: 2.0 3.0 4.0 4.5 5.0\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我不知道如何从interp. 我也尝试了这个问题的解决方案,但该解决方案也遇到了完全相同的问题。

\n\n

更新:

\n\n

我使用 numpy 和 pandas 对这两个解决方案进行了快速基准测试,结果如下:

\n\n
y = np.array([1,2,0,4,0,5,0,0,11])\n\ndef test1(y):\n\n    x = np.arange(len(y))\n    idx = np.nonzero(y)\n    interp = interp1d(x[idx],y[idx])\n\n    return interp(x)\n\ndef test2(y):\n    s = pd.Series(y)\n …
Run Code Online (Sandbox Code Playgroud)

python benchmarking interpolation numpy scipy

3
推荐指数
1
解决办法
7766
查看次数

标签 统计

benchmarking ×1

interpolation ×1

numpy ×1

python ×1

scipy ×1