安装multipolyfit库后运行代码出现ModuleNotFoundError: No module named 'core'错误的技术求助
解决multipolyfit导入错误及多变量多项式拟合问题
嘿,我来帮你搞定这个问题!你遇到的ModuleNotFoundError: No module named 'core'其实是因为PyPI上的官方multipolyfit包已经很久没维护了,内部模块结构出了问题。下面一步步给你解决:
一、先修复库的安装问题
先把有问题的旧版本卸载,然后装一个维护良好的分支版本:
pip uninstall -y multipolyfit pip install git+https://github.com/mdboom/multipolyfit.git
这个版本已经修复了导入路径的bug,装完就能正常用了。
二、修正代码里的小问题
你的代码还有几个小坑得填上才能跑起来:
- 你导入了
numpy为np,但代码里却写了numpy.array,得统一改成np.array; deg变量没定义,得指定拟合的多项式阶数,比如deg=3;- multipolyfit返回的系数不能直接用
np.polyval计算预测值,得用库自带的mk_model函数生成预测函数; - 单变量拟合的时候,传入的自变量不需要堆叠,直接传一维数组就行(如果是多变量才需要堆叠成每行一个变量的二维数组)。
修正后的完整可运行代码:
import os import csv import pandas as pd print('\n'*2) import re import matplotlib import multipolyfit as mpf from matplotlib.figure import Figure from matplotlib import style import numpy as np import math import matplotlib.pyplot as plt from matplotlib.legend_handler import HandlerLine2D from scipy.stats import linregress x = [190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275,280,285,290] av_50 = [5.045, 5.05, 5.115, 5.23, 5.355, 5.42, 5.59, 5.77, 5.855, 5.8, 5.745, 5.725, 5.795, 5.835, 5.81, 5.73, 5.675, 5.65, 5.63, 5.555, 5.405] def min_max_values(num_list): results_list = sorted(num_list) return results_list[0], results_list[-1] min_x, max_x = min_max_values(x) # Plotting setup plt.axis([min_x - 5, max_x + 5, 0, 8]) x_np = np.array(x) y_np = np.array(av_50) plt.plot(x_np, y_np, 'kx', label='Original Data') # 定义多项式阶数 deg = 3 # 单变量多项式拟合 coeffs = mpf.multipolyfit(x_np, y_np, deg) # 生成用于预测的函数 predict_func = mpf.mk_model(coeffs) # 生成平滑的x序列用于绘制拟合曲线 x2 = np.arange(min(x_np)-1, max(x_np)+1, 0.01) # 计算拟合值:单变量需要转成(1, N)的二维数组 y2 = predict_func(x2.reshape(1, -1)) plt.plot(x2, y2, label=f"Polynomial Fit (deg={deg})") plt.legend() plt.show()
三、如果是多变量拟合的情况
要是你真的需要做多变量(比如两个自变量x1和x2)的拟合,代码可以这么写:
# 示例:两个自变量的拟合 x1 = np.array([1,2,3,4,5]) x2 = np.array([2,3,4,5,6]) y = np.array([3,5,7,9,11]) # 把自变量堆叠成二维数组:每行对应一个变量 stacked_x = np.array([x1, x2]) deg = 2 coeffs = mpf.multipolyfit(stacked_x, y, deg) predict_func = mpf.mk_model(coeffs) # 生成新的自变量序列并预测 x1_new = np.arange(1,6,0.1) x2_new = np.arange(2,7,0.1) y_pred = predict_func(np.array([x1_new, x2_new]))
这样就能顺利完成多变量多项式拟合啦!
内容的提问来源于stack exchange,提问作者Windy71
相关产品推荐
相关产品推荐

