假设我们有一个数组a = np.array([1,2,0,4,0,5,0,0,11]),我们如何得到:
array([ 1, 2, 3, 4, 4.5, 5, 7, 9, 11])\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试过的是:
\n\nfrom 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)\nRun Code Online (Sandbox Code Playgroud)\n\n这似乎确实完成了寻找中间值的实际工作。例如:
\n\nprint (interp(1), interp(1.5), interp(2), interp(2.5), interp(3))\n#out: 2.0 3.0 4.0 4.5 5.0\nRun Code Online (Sandbox Code Playgroud)\n\n但我不知道如何从interp. 我也尝试了这个问题的解决方案,但该解决方案也遇到了完全相同的问题。
更新:
\n\n我使用 numpy 和 pandas 对这两个解决方案进行了快速基准测试,结果如下:
\n\ny = 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)