2013-05-31 25 views
6

Ben numpy.linspace ile oluşturulan değer dizisi yineleme çalışıyorum iterable değildir: Bu kod ofisimin Bilgisayarımda sorunsuz çalıştı'numpy.float64' nesne

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

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

, ama bu sabah oturdu farklı bir makinede evden çalışma ve bu hata geldi etmek:

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 sadece yüzen bir dizidir ve komut dosyası içeriğini baskı sorunu yok - sadece, görünüşte onlar aracılığıyla yineleme. Neyin kırılmasına neden olan herhangi bir öneri ve olası düzeltmeler?

+0

aynı versiyonları İkinci boyutta iki öğelerle iki boyutlu bir dizi çeşit gerekir? Python'un aynı sürümleri? Arc'ın aynı versiyonları? Son olarak, float64'da çalışman gerekecek mi? – Jzl5325

+3

Biri, dizin için, slX: 'ile bir dizi float üzerinde iterasyon yapmaz. Bu, Python'un herhangi bir sürümünde, numpy'nin herhangi bir sürümünde çalışmayacaktır. Bunun yerine, aslında, dizininizde, ofis bilgisayarında numaralandırmayı, numaralandırmayı (slX) işaret ettiniz mi? Bu, başarmak istediğin şey gibi görünüyor. –

+0

slX'in yinelenebilir olması mı gerekiyor? 64 bitlik bir şamandıra olarak döndürülmüş gibi görünüyor, bu yüzden bunu yineleyemezsiniz. SlX'in bir kayan nokta olarak tekrarlanabilir ve bir şamandıra olarak yorumlanması mümkün mü? –

cevap

6

numpy.linspace() size tek boyutlu bir NumPy dizisi verir. Bu nedenle

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

: Örneğin:

for index,point in my_array 

çalışamaz.

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

Şimdi bunu yapabilirsiniz: Numpy ait

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

1 2 
4 5