2013-05-31 10 views
6

Ich versuche, ein Array von Werten mit numpy.linspace erzeugt iterieren:‚numpy.float64‘ Objekt Iterable nicht

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

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

Dieser Code auf meinem Büro-Computer fein gearbeitet, aber ich saß heute Morgen nach unten von zu Hause aus auf einer anderen Maschine zu arbeiten und dieser Fehler kam:

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 nur ein Array von Schwimmern ist, und das Skript hat kein Problem, den Inhalt Druck - nur scheinbar durch sie laufen. Irgendwelche Vorschläge für das, was es zum Bruch bringt, und mögliche Korrekturen?

+0

gleiche Versionen von numpy? Die gleichen Versionen von Python? Gleiche Versionen von Arc? Schließlich, müssen Sie in float64 arbeiten? – Jzl5325

+3

Man iteriert nicht über ein Array von Gleitkommazahlen mit 'for index, point in slX:'. Dies funktioniert in keiner Version von Python mit irgendeiner Version von numpy. Haben Sie tatsächlich 'for index, point in enumerate (slX):' auf Ihrem Bürocomputer ausgeführt? Das scheint das zu sein, was Sie erreichen wollen. –

+0

Soll slX ein iterable sein? Sieht so aus, als ob es als 64 Bit Float zurückgegeben wird, weshalb Sie nicht iterieren können. Ist es möglich, dass slX als iterable mit einer Länge von eins zurückgegeben wird und numpy dies als float interpretiert? –

Antwort

6

numpy.linspace() gibt Ihnen ein eindimensionales NumPy-Array. Zum Beispiel:

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

Deshalb:

for index,point in my_array 

kann nicht funktionieren. Sie würden mit zwei Elementen in der zweiten Dimension eine Art von zweidimensionaler Anordnung benötigen:

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

Jetzt können Sie dies tun:

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

1 2 
4 5 
Verwandte Themen