使用嵌套循环计算残差平方和时遇TypeError:numpy.float64不可迭代
残差平方和计算报错问题解答
报错信息
File "...", line 13, in <module> for y in values_subtraction_mean: TypeError: 'numpy.float64' object is not iterable
错误原因
你犯了两个核心逻辑错误:
- 把单个数值当成可迭代对象:在第一个
for x in values循环里,每次x是列表里的单个元素,values_subtraction_mean = x - mean得到的是单个浮点数(比如第一次循环得到2.2),而非你预期的包含所有差值的列表。所以你试图用for y in values_subtraction_mean遍历它时,Python会报错——浮点数不能被遍历。 - 平方计算错误:你写的
math.sqrt(y)是求平方根,而残差平方和需要的是差值的平方,应该用y ** 2或者math.pow(y, 2)。另外sum()需要传入可迭代对象,直接传单个数值也会报错。
修正后的代码
基础循环实现(符合你想用循环的需求)
import math values = [5, 2, 3, 4, 0] # 手动计算均值,避免和numpy的mean函数重名 mean_val = sum(values) / len(values) residual_sum = 0 # 遍历每个值,计算差值平方并累加 for x in values: diff = x - mean_val residual_sum += diff ** 2 print(residual_sum) # 输出:14.8
numpy简化实现(更高效)
import numpy as np values = np.array([5, 2, 3, 4, 0]) mean_val = np.mean(values) residual_sum = np.sum((values - mean_val) ** 2) print(residual_sum) # 输出:14.8
内容的提问来源于stack exchange,提问作者Nodigap
相关产品推荐
相关产品推荐

