使用scipy的RBF插值时报cannot perform reduce with flexible type错误如何解决
问题根源
报错TypeError: cannot perform reduce with flexible type的核心原因是你加载得到的resulttokenX/resulttokenY/resulttokenF均为字符串类型的numpy数组,无法执行数值类的取最值、插值运算。从你补充的resulttokenY2输出可以验证:数组元素带引号,是字符串格式的数值,而非实际浮点型数值。
解决方案
1. 修改数据加载逻辑,转换为数值类型
你可以选择两种修改方式,二选一即可:
- 第一种:读取分割字符串时直接转浮点型
修改加载循环中的append逻辑:
for x in linestoken: # 分割后直接转float再存入列表 resulttokenX.append(float(x.split()[tokens_column_numberX]))
- 第二种:转numpy数组时指定数值类型
在创建数组的步骤指定dtype为浮点型:
resulttokenX = np.array(resulttokenX, dtype=np.float64)
Y轴和F(X,Y)数据的加载逻辑也做同样修改即可。
2. 验证修改效果
修改完成后执行以下代码验证类型:
print(resulttokenX.dtype)
输出为float32/float64就说明类型正确,后续的min()、max()以及RBF插值代码都可以正常运行。
额外注意点
你当前代码的导入语句为from scipy import interpolate,后续调用Rbf时不需要加scipy.前缀,否则会报变量未定义错误,修改插值行代码为:
rbf = interpolate.Rbf(resulttokenX, resulttokenY, resulttokenF, function='linear')
内容的提问来源于stack exchange,提问作者slow_learner
相关产品推荐
相关产品推荐

