这就是我得到的:
TypeError: 'float' object is unsubscriptable
这就是我的所作所为:
import numpy as N
import itertools
#I created two lists, containing large amounts of numbers, i.e. 3.465
lx = [3.625, 4.625, ...]
ly = [41.435, 42.435, ...] #The lists are not the same size!
xy = list(itertools.product(lx,ly)) #create a nice "table" of my lists
#that iterttools gives me something like
print xy
[(3.625, 41.435), (3.625, 42.435), (... , ..), ... ]
print xy[0][0]
print xy[0][1] #that works just fine, I can access the varios values of the tuple in the list
#down here is where the error occurs
#I basically try to access certain points in "lon"/"lat" with values from xy through `b` and `v`with that iteration. lon/lat are read earlier in the script
b = -1
v = 1
for l in xy:
b += 1
idx = N.where(lon==l[b][b])[0][0]
idy = N.where(lat==l[b][v])[0][0]
先前在脚本中读取了 lan/lot
。我正在使用netCDF文件,这是纬度/经度,读入lan / lot。
它是一个数组,用numpy构建。
错误在哪里?
我尝试将b
和v
与int()
转换为整数,但这没有帮助。
N.where
正在通过xy
中的值访问我想要继续执行的网格上的某个值。如果您需要更多代码或一些情节,请告诉我。
答案 0 :(得分:1)
你的问题是当你循环遍历xy时,l
的每个值都是你的xy列表中的一个元素,一个元组。循环的第一次迭代中l
的值为(3.625, 41.435)
,第二次为(3.625, 42.435)
,依此类推。
当您执行l[b]
时,您会获得3.625
。执行l[b][b]
时,您尝试获取3.625
的第一个元素,但这是一个浮点数,因此它没有索引。这会给你一个错误。
换句话说,在循环的第一次迭代中,l
与xy[0]
相同,因此l[0]
与xy[0][0]
相同。在第二次迭代中,l
与xy[1]
相同,因此l[0]
与xy[1][0]
相同。在第三次迭代中,l
相当于xy[2]
,依此类推。所以在第一次迭代中,l[0][0]
与xy[0][0][0]
相同,但没有这样的事情,所以你得到一个错误。
要获取元组的第一个和第二个值,请使用索引方法:
x = l[0]
y = l[1]
或者,在您的情况下:
for l in xy:
idx = N.where(lon==l[0])[0][0]
idy = N.where(lat==l[1])[0][0]
然而,最简单的解决方案是使用所谓的" tuple unpacking":
for x, y in xy:
idx = N.where(lon==x)[0][0]
idy = N.where(lat==y)[0][0]
这相当于:
for l in xy:
x, y = l
idx = N.where(lon==x)[0][0]
idy = N.where(lat==y)[0][0]
反过来相当于:
for l in xy:
x = l[0]
y = l[1]
idx = N.where(lon==x)[0][0]
idy = N.where(lat==y)[0][0]