【问题标题】:'numpy.float64' object is not iterable'numpy.float64' 对象不可迭代
【发布时间】:2013-05-27 13:55:49
【问题描述】:

我正在尝试迭代使用 numpy.linspace 生成的值数组:

slX = numpy.linspace(obsvX, flightX, numSPts)
slY = np.linspace(obsvY, flightY, numSPts)

for index,point in slX:
    yPoint = slY[index]
    arcpy.AddMessage(yPoint)

这段代码在我的办公室电脑上运行良好,但我今天早上坐在家里在另一台机器上工作,然后出现了这个错误:

File "C:\temp\gssm_arcpy.1.0.3.py", line 147, in AnalyzeSightLine
  for index,point in slX:
TypeError: 'numpy.float64' object is not iterable

slX 只是一个浮点数组,脚本打印内容没有问题——只是,显然是迭代它们。关于导致它崩溃的任何建议以及可能的修复方法?

【问题讨论】:

  • 相同版本的numpy?相同版本的 Python?相同版本的 Arc?最后,你需要在float64中工作吗?
  • 不使用for index, point in slX: 遍历浮点数组。这不适用于任何版本的 Python 和任何版本的 numpy。相反,您是否真的在办公室计算机上运行了for index, point in enumerate(slX):?这似乎就是您打算完成的任务。
  • slX 应该是可迭代的吗?看起来它作为 64 位浮点数返回,这就是为什么你不能遍历它。 slX 是否有可能作为长度为 1 的迭代返回,而 numpy 将其解释为浮点数?
  • numpy、python 和 Arc 的相同版本。我不需要在 float64 中工作,坦率地说,直到错误被抛出我才知道我是。罗伯特,据我所知,代码完全相同(不过,我将它保存在我的 Dropbox 文件夹中,因此那里和这里之间的某处可能存在同步错误,这意味着我正在使用旧版本;@ 987654326@ 更有意义)
  • 快速测试确认这不是 ArcPy 问题;这是一个纯 Python 问题。例如,for i,j in numpy.linspace(0,1): ... print j 会产生相同的错误。变体for j in numpy.linspace(0,1): ... print j 工作正常,表明问题所在。

标签: python numpy iterator


【解决方案1】:

numpy.linspace() 为您提供一维 NumPy 数组。例如:

>>> my_array = numpy.linspace(1, 10, 10)
>>> my_array
array([  1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.])

因此:

for index,point in my_array

无法工作。您将需要某种二维数组,其中包含两个 二维元素:

>>> two_d = numpy.array([[1, 2], [4, 5]])
>>> two_d
array([[1, 2], [4, 5]])

现在你可以这样做了:

>>> for x, y in two_d:
    print(x, y)

1 2
4 5

【讨论】:

  • 穆勒:很抱歉发布了 necropost。在定义方差时,我收到了类似的错误消息:我已经定义了平均值 mean(Y)。现在我设置 Def :Var(Y): y_bar=mean(Y)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 2017-02-21
  • 2019-08-03
  • 2020-04-08
  • 2019-06-13
  • 2017-05-14
  • 1970-01-01
相关资源
最近更新 更多