【发布时间】: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工作正常,表明问题所在。