使用 scipy.interpolate.interp2d 时出现问题。代码执行时间过长

Problem using scipy.interpolate.interp2d. The code takes too long to execute

提问人:slow_learner 提问时间:2/4/2020 更新时间:2/4/2020 访问量:1381

问:

我有一个包含三列的文本文件。第一个是 X 位置,第二个是 Y 位置,第三个是 X 和 Y 变量的值。我想插值它。但是,当我运行代码时,它花费的时间太长了。在停止执行之前,我已经让它连续运行了 10 分钟,但它没有奏效。我在 mathematica 中构建了一个类似的代码,它只需要 10 秒,就可以做更多的事情。

我读取文本文件并将 X、Y 和 f(X, Y) 的值指定为

f = open('XdataTXT.txt','r')
linesX=f.readlines()
X_column_number = 0
positionX=[]
Y_column_number = 1
positionY=[]
VarX_column_number=2
varX=[]
for x in linesX:
    positionX.append(float(x.split()[X_column_number]))
    positionY.append(float(x.split()[Y_column_number]))
    varX.append(float(x.split()[VarX_column_number]))
f.close()

一旦我有了这三个向量,我就会尝试遵循这个例子,其中做了类似的事情。在那里,分配函数 f(x, y) 的值,然后执行插值。

我的代码如下

windXInterpFunc = interpolate.interp2d(positionX, positionY, windX, kind='cubic')

我也尝试过转置载体,但它也不起作用。

positionXT=np.reshape(positionX, 42441)
positionYT=np.reshape(positionY, 42441)
windXT=np.reshape(windX, 42441)

有人可以告诉我我的错误在哪里吗?

python numpy scipy 插值

评论

0赞 user234461 2/4/2020
您是否能够确定哪些线路需要很长时间才能运行?(包括您对 .) 的调用。reshape
0赞 slow_learner 2/4/2020
重塑几乎是瞬间的,甚至不需要一秒钟。问题是下一行windXInterpFunc = interpolate.interp2d(positionXT, positionYT, windXT, kind='cubic')
1赞 user234461 2/4/2020
文档说,重塑的阵列的存储不能保证是连续的,如果可能的话,这将是一个新视图。您能否让我们知道 positionXT 变量是什么 python,或者尝试直接构造 numpy 或 python,而不是使用原生 python 列表?也许底层存储速度很慢。此外,interp2d 文档提到,如果 x 和 y 是一个网格(或者可以按摩成一个网格),则 RectBivariateSpline 会快得多。reshapetypearray
0赞 slow_learner 2/4/2020
positionXT 的类型是 .感谢您对 RectBivariateSpline 的建议。但是,如果我写一个失败的诱饵numpy.ndarraywindXInterpFunc = interpolate.interp2d(positionXT, positionYT, windXT, kind='RectBivariateSpline')raise ValueError("Unsupported interpolation type.")
0赞 mfgeng 4/8/2021
我有点晚了,但是如果其他人需要interp2d的帮助,我建议先在3D空间中绘制您的函数,看看它是否看起来可以合理地插值:(您需要首先将数组重塑为2d)fig = plt.figure()ax = fig.add_subplot(111, projection='3d')ax.plot_surface(positionX, positionY, windX)

答: 暂无答案