2013-05-31 8 views
6

Próbuję iteracyjne tablicę wartości generowanych z numpy.linspace:„numpy.float64” nie jest iterable

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

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

Ten kod pracował dobrze na moim komputerze biurowym, ale Usiadłem rano pracować z domu na innym komputerze i ten błąd pojawił się:

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 jest tylko tablica pływaków, a skrypt nie ma problemu z drukowaniem zawartość - wystarczy, najwyraźniej iteracja nich. Wszelkie sugestie co do tego, co jest przyczyną awarii i możliwe poprawki?

+0

same wersje numpy? Te same wersje Pythona? Te same wersje Arc? Wreszcie, czy musisz pracować w float64? – Jzl5325

+3

Jeden nie wykonuje iteracji po tablicy zmiennych z 'dla indeksu, punktu w slX:'. To nie zadziała w żadnej wersji Pythona z żadną wersją numpy. Zamiast tego, czy rzeczywiście uruchomiłeś 'index, point in enumerate (slX):' na twoim komputerze biurowym? To wydaje się być tym, co zamierzacie osiągnąć. –

+0

Czy slX ma być iterable? Wygląda na to, że został zwrócony jako 64-bitowy float, dlatego nie można go iterować. Czy jest możliwe, że slX jest zwracany jako iterowalny o długości jednego, a numpy interpretuje to jako float? –

Odpowiedz

6

numpy.linspace() daje jednowymiarową tablicę NumPy. Na przykład:

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

Dlatego:

for index,point in my_array 

nie może pracować. Czy trzeba jakiś tablicy dwuwymiarowej z dwoma elementów w drugim wymiarze:

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

Teraz można to zrobić:

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

1 2 
4 5 
Powiązane problemy