2013-05-31 99 views
6

我试图用迭代产生numpy.linspace值的数组:“numpy.float64”对象不是可迭代

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只是float数组,而脚本有没有问题,打印的内容 - 只是通过他们显然迭代。任何建议是什么导致它打破,并可能修复?

+0

版本相同?相同版本的Python?相同版本的Arc?最后,你需要使用float64吗? – Jzl5325

+3

其中一个不会使用'for index指向slX:'来迭代浮点数组。这不适用于任何版本的Python和任何版本的numpy。相反,你是否真的在索引处运行了',在你的办公室计算机上运行枚举(slX):'?这似乎是你想要完成的。 –

+0

slX应该是可迭代的吗?看起来它是以64位浮点形式返回的,这就是为什么你无法遍历它的原因。 slX是否可能作为长度为1的迭代器返回并且numpy将其解释为float? –

回答

6

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]]) 

现在你可以这样做:numpy的的

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

1 2 
4 5