我想计算sum of squared errors,我使用了一个嵌套循环。
的数据
我是Python新手,我很抱歉,但我遇到了错误:
File "...", line 13, in <module>
for y in values_subtraction_mean:
TypeError: 'numpy.float64' object is not iterable
字符串
问题出在第二个循环中,当我必须在for y in values_subtraction_mean: result = sum(math.sqrt(y))
中计算result
时:
在第二个循环中,它应该显示values_subtraction_mean
的所有值,所以它应该显示2.2, -0.8, 0.2, 1.2, -2.8
。接下来,对于上面的每个值,应该计算sqrt并获得4.84, 0.64, 0.04, 1.44, 7.84
。最后,您必须将所有这些数字相加并获得14.8
我做错了什么?
from numpy import mean
import math
values = [5, 2, 3, 4, 0]
mean = mean(values)
for x in values:
values_subtraction_mean = x - mean
print(values_subtraction_mean)
#2.2, -0.8, 0.2, 1.2, -2.8
for y in values_subtraction_mean:
result = sum(math.sqrt(y))
print(result)
#sqrt: 4.84, 0.64, 0.04, 1.44, 7.84
#sum and result: 14.8
型
我试着用这个,但它不能解决问题:
import numpy as np
values = np.array([5, 2, 3, 4, 0])
型
我试着不使用numpy,用sum(values) / len(values)
计算平均值,但它也不起作用,我得到错误:TypeError: 'float' object is not iterable
个
3条答案
按热度按时间toe950271#
字符串
gmxoilav2#
你不需要一个嵌套的for循环,而是需要两个空列表来存储值。
此外,你需要平方值,而不是平方根。
个字符
编辑:
Numpy版本没有
forloops
型
ff29svar3#
您似乎在理解基本的python迭代方面存在问题,更不用说numpy了。
字符串
所以错误在
for y in values...:
行中。for x in values:
工作,因为values
是一个列表。在该循环中,它计算mean
(使用numpy mean函数):型
你从列表中的一个元素中减去了平均值,然后试图对该值进行累加。
y
循环嵌套在x
循环中。另外,x
循环没有累加任何x-mean
值。下面的行也会有问题
型
math
函数只能处理标量,不能处理列表或数组。但是pythonsum
需要一个可迭代的对象(例如列表)。所以我不太明白你在这里的意图。修正迭代- sort of
在列表中添加结果的标准方法是将结果追加到列表中。更改代码:
型
values_sublist
是所有列表值减去它们的平均值。所以y
循环可以工作。但是它遇到了另一个问题-它不能接受负数的sqrt!numpy版本
型
如果
values
是一个numpy数组,那么可以在没有python循环的情况下完成此操作。现在负值会产生一个nan
值和一个警告。没有必要在nan
数组上执行sum
。复杂值
我们可以通过将值设置为
complex
dtype数组来处理sqrt
问题:型
不过,我不确定这是你需要的。
square而不是sqrt
但是等等,你想要的“sqrt”值实际上是平方值,而不是平方根。
型
现在你的两个循环工作得很好。
并写成一个numpy表达式:
型
我们也可以使用列表解析来代替for循环--尽管我们仍然需要使用
np.mean
,或者一个等价的循环。所以它不是一个纯粹的列表计算:型
sqrt和复杂的代码可能会分散注意力,但我会留下它,因为我认为它可能是有指导意义的,它是调试代码的一部分。