Python使用RBF时出现IndentationError错误求助
修复一维RBF插值代码的IndentationError及其他问题
嘿,我来帮你搞定这个缩进错误,顺便修正代码里的其他小问题~
问题原因分析
你遇到的IndentationError: expected an indented block是Python的典型错误——Python靠缩进区分代码块,你的代码里有两处没做好缩进:
def func(x1):定义函数后,函数体没有缩进for循环的内部代码块也没有缩进
另外还有几个影响运行的小问题:
np.linespace是拼写错误,正确写法是np.linspace- 用
iloc提取列时,[1]这种写法会返回二维数组,后续插值容易出问题,直接用数字索引更稳妥 - 从Excel读取的数组可能是二维的,需要转成一维数组才能满足RBF插值的输入要求
修复后的完整代码
# 1-d interpolation import numpy as np from scipy import interpolate import pylab as py import pandas as pd # Read the Dataset from Excel File def func(x1): return x1*np.exp(-5.0*x1**2) dataset = pd.read_excel('Messwerte_FIBRE1.xlsx') dataset = dataset.drop([0]) # 直接用列索引数字提取,避免返回二维数组 x = dataset.iloc[:, 1] y = dataset.iloc[:, 9] # 转换为一维浮点数组,适配RBF插值要求 x1 = np.array(x, dtype=float).flatten() y1 = np.array(y, dtype=float).flatten() fvals = func(x1) # 修正拼写错误:linespace -> linspace xnew = np.linspace(430, 490, 800) # 循环代码块正确缩进 for kind in ['multiquadric','inverse multiquadric','gaussian', 'linear','cubic','quintic','thin-plate']: newfunc = interpolate.Rbf(x1, fvals, function=kind) fnew = newfunc(xnew) # 可选:添加绘图代码查看不同插值方法的效果 py.plot(xnew, fnew, label=kind) # 展示图例和图像(不需要可以删掉) py.legend() py.show()
额外提示
- 如果你的需求是用
y1(Excel里的第10列数据)作为插值目标,把fvals = func(x1)改成fvals = y1就行 - 确保Excel文件和脚本在同一目录,或者填写完整文件路径
- 代码里加了绘图逻辑,能直观对比不同插值方法的效果,不需要的话可以删掉绘图相关代码
内容的提问来源于stack exchange,提问作者Umair Rehman
相关产品推荐
相关产品推荐

