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 不可调用错误? [关闭]

逻辑回归 - numpy.float64

python numpy错误“TypeError:'numpy.float64'对象不能解释为整数”

为啥 Pandas 将我的 numpy float32 强制转换为 float64?