numpy.float64 不可迭代
Posted
技术标签:
【中文标题】numpy.float64 不可迭代【英文标题】:numpy.float64 is not iterable 【发布时间】:2017-02-21 09:57:23 【问题描述】:我正在尝试打印一个使用 numpy 数组和列表中的多个参数的函数,但我不断收到错误“numpy.float 64 object is not iterable”。我已经在论坛上查看了有关该主题的几个问题并尝试了不同的答案,但似乎都没有奏效(或者我可能做错了我仍然是 python 的初学者)但这一切都归结为同一件事,我卡住了,我希望你们能提供帮助。我正在使用 python 2.7,这是代码:
编辑:包含错误消息并将打印更改为“print(T, (obj(T),))”
from __future__ import division
import numpy as np
import random
K = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1,])
x = len(K)
#Production rates and demand rates of products setup costs and holding costs (p, d, c, h)
p = np.array([193, 247, 231, 189, 159])
d = np.array([16, 16, 21, 19, 23])
#c1 = np.array([random.random() for _ in range(x)]) use these values as test values for c
c = [0.752, 0.768, 0.263, 0.152, 0.994, 0.449, 0.431, 0.154, 0.772]
h = [0.10*c[i]/240 for i in range(x)]
n = len(p)
t = [10.76, 74.61, 47.54, 29.40, 45.00, 90.48, 17.09, 85.19, 35.33]
def obj(T):
for i in range(n):
for q in range(x):
for k in range(x):
return ((1. / T) * c[q] + sum((.5*h[k]*(p[i]-d[i])* (p[i]/d[i])*(t[k])**2)))
for T in range(200, 900):
print(T, (obj(T),))
runfile('C:/Users/Jasper/Anaconda2/Shirodkar.py', wdir='C:/Users/Jasper/Anaconda2')
Traceback (most recent call last):
File "<ipython-input-1-0cfdc6b9fe69>", line 1, in <module>
runfile('C:/Users/Jasper/Anaconda2/Shirodkar.py', wdir='C:/Users/Jasper/Anaconda2')
File "C:\Users\Jasper\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 714, in runfile
execfile(filename, namespace)
File "C:\Users\Jasper\Anaconda2\lib\site- packages\spyderlib\widgets\externalshell\sitecustomize.py", line 74, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)
File "C:/Users/Jasper/Anaconda2/Shirodkar.py", line 24, in <module>
print(T, (obj(T),))
File "C:/Users/Jasper/Anaconda2/Shirodkar.py", line 21, in obj
return ((1. / T) * c[q] + sum((.5*h[k]*(p[i]-d[i])*(p[i]/d[i])*(t[k])**2)))
TypeError: 'numpy.float64' object is not iterable
【问题讨论】:
请发布完整的堆栈跟踪,包括发生错误的行 你认为循环中的无条件return
有什么作用?
【参考方案1】:
我怀疑问题出在这里:
sum((.5*h[k]*(p[i]-d[i])* (p[i]/d[i])*(t[k])**2))
那个表达式的最终结果是一个浮点数,不是吗? sum() 是干什么用的?
【讨论】:
这是一个将不同产品的持有成本相加的方程式,这是数学: 查看 Python 内置 sum 的文档:docs.python.org/2/library/functions.html#sum。它需要一个可迭代的(例如列表)它的参数。但是,您正在尝试总结单个值(numpy.float64)。 1/T [ c(q)+∑_(k=1)^k▒〖1/(2 )*h^k (p^kd^k )(p^k/d ^k ])(t^k )**2 感谢您的综合回答让我意识到 sum() 不是必需的,它现在可以工作了!以上是关于numpy.float64 不可迭代的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:“numpy.float64”对象不可调用 - 打印 F1 分数时
TypeError:'numpy.float64'对象不可调用,为什么?
如何修复 scipy 的 odeint 函数中的 np.float64 不可调用错误? [关闭]