'numpy.float64' object is not iterable

192,023

numpy.linspace() gives you a one-dimensional NumPy array. For example:

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

Therefore:

for index,point in my_array

cannot work. You would need some kind of two-dimensional array with two elements in the second dimension:

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

Now you can do this:

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

1 2
4 5
Share:
192,023

Related videos on Youtube

Erica
Author by

Erica

Interested in GIS modeling, databases, web interfaces. MS in geography with experience in ESRI products, including Desktop, Pro, Server, SDE, Utility Network, and ArcPy.

Updated on July 09, 2022

Comments

  • Erica
    Erica almost 2 years

    I'm trying to iterate an array of values generated with 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)
    

    This code worked fine on my office computer, but I sat down this morning to work from home on a different machine and this error came up:

    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 is just an array of floats, and the script has no problem printing the contents -- just, apparently iterating through them. Any suggestions for what is causing it to break, and possible fixes?

    • Robert Kern
      Robert Kern almost 11 years
      One does not iterate over an array of floats with for index, point in slX:. This will not work in any version of Python with any version of numpy. Instead, did you actually run for index, point in enumerate(slX): on your office computer? That would seem to be what you are intending to accomplish.
    • Erica
      Erica almost 11 years
      Same versions of numpy, python, and Arc. I don't need to work in float64 and frankly didn't know I was until the error was thrown. Robert, as far as I know the code is exactly the same (I saved it in my Dropbox folder, however, so it's possible there was a sync error somewhere between there and here which means I'm working with an older version; the enumerate(slX) makes a lot more sense)
  • MSIS
    MSIS almost 4 years
    Muller: Sorry for necropost. I am having a similar error message when defining variance: I already defined the mean, mean(Y). Now I set Def :Var(Y): y_bar=mean(Y)

Related