You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

曲线拟合后,如何让for循环输出预期的浮点型数值?

问题原因与解决方案

问题出在b_new的初始化上:np.arange(len(a_new))创建的是整数类型的numpy数组,当你把浮点计算结果赋值给整数数组元素时,numpy会自动将浮点值截断为整数,导致输出都是整数。

解决办法有两种:


1. 直接初始化浮点类型的b_new

把b_new = np.arange(len(a_new))替换成浮点类型的数组初始化,比如:

b_new = np.zeros(len(a_new), dtype=np.float64)  # 全0浮点数组
# 或者
b_new = np.arange(len(a_new), dtype=np.float64)  # 浮点类型的序列数组

修改后的完整代码:

from numpy.polynomial import polynomial as P
import numpy as np

a = np.array([5, 55, 211, 250, 270, 300, 330, 350, 400, 450, 500, 550, 600, 750, 870, 1000])
b = np.array([0.38, 0.96, 1.90, 2.05, 2.13, 2.25, 2.35, 2.42, 2.60, 2.75, 2.90, 3.04, 3.18, 3.65, 4.06, 4.35]) 

c = P.polyfit(a, b, 2)

a_new = np.arange(2000) 
b_new = np.zeros(len(a_new), dtype=np.float64)  # 改为浮点类型数组

for x in range(len(a_new)):
    b_new[x] = c[0] + c[1] * a_new[x] + c[2] * a_new[x]**2
    print(f"{x}, {b_new[x]}")

2. 用numpy内置的多项式求值函数(推荐,更高效)

不需要手动写循环,直接用P.polyval()函数处理整个数组,自动返回浮点结果,代码更简洁且性能更好:

from numpy.polynomial import polynomial as P
import numpy as np

a = np.array([5, 55, 211, 250, 270, 300, 330, 350, 400, 450, 500, 550, 600, 750, 870, 1000])
b = np.array([0.38, 0.96, 1.90, 2.05, 2.13, 2.25, 2.35, 2.42, 2.60, 2.75, 2.90, 3.04, 3.18, 3.65, 4.06, 4.35]) 

c = P.polyfit(a, b, 2)

a_new = np.arange(2000) 
b_new = P.polyval(a_new, c)  # 直接用polyval计算数组的多项式值

for x in range(len(a_new)):
    print(f"{x}, {b_new[x]}")

补充说明

numpy数组的类型是固定的,一旦创建就不能随意改变类型(除非显式转换),所以初始化时一定要匹配你需要存储的数据类型。而P.polyval()是专门为多项式求值设计的函数,支持矢量运算,比手动循环效率高很多,尤其当数组很大时优势更明显。

内容的提问来源于stack exchange,提问作者Always Trying

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:01:09