2024-09-28 17:18:15 发布
网友
这就是我得到的:
TypeError: 'float' object is unsubscriptable
我就是这么做的:
lan/lot在脚本的前面被读取。我正在处理一个netCDF文件,这是纬度/经度,读入lan/lot。 它是一个数组,用numpy构建。在
lan/lot
哪里出错了? 我试图用int()将b和{}转换为整数,但这没用。 N.where正在通过xy中的值访问网格上我要继续处理的某个值。如果你需要更多的代码或绘图,请告诉我。在
int()
b
N.where
xy
您的问题是,当您在xy上循环时,l的每个值都是xy列表中的一个元素,元组之一。循环的第一次迭代中l的值是(3.625, 41.435),第二次迭代是(3.625, 42.435),依此类推。在
l
(3.625, 41.435)
(3.625, 42.435)
当你做l[b]时,你得到3.625。当您执行l[b][b]时,您将尝试获得3.625的第一个元素,但这是一个浮点,因此它没有索引。这给了你一个错误。在
l[b]
3.625
l[b][b]
换句话说,在循环的第一次迭代中,l与{}相同,因此{}与{}相同。在第二次迭代中,l与{}相同,因此l[0]与{}相同。在第三次迭代中,l等价于xy[2],依此类推。所以在第一次迭代中,l[0][0]与xy[0][0][0]相同,但是没有这样的东西,所以会得到一个错误。在
l[0]
xy[2]
l[0][0]
xy[0][0][0]
要获得元组的第一个和第二个值,使用索引方法,只需执行以下操作:
x = l[0] y = l[1]
或者,在你的情况下:
然而,最简单的解决方案是使用所谓的“元组解包”:
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]
您的问题是,当您在xy上循环时,
l
的每个值都是xy列表中的一个元素,元组之一。循环的第一次迭代中l
的值是(3.625, 41.435)
,第二次迭代是(3.625, 42.435)
,依此类推。在当你做
l[b]
时,你得到3.625
。当您执行l[b][b]
时,您将尝试获得3.625
的第一个元素,但这是一个浮点,因此它没有索引。这给了你一个错误。在换句话说,在循环的第一次迭代中,}相同,因此{}与{}相同。在第二次迭代中,}相同,因此}相同。在第三次迭代中,
l
与{l
与{l[0]
与{l
等价于xy[2]
,依此类推。所以在第一次迭代中,l[0][0]
与xy[0][0][0]
相同,但是没有这样的东西,所以会得到一个错误。在要获得元组的第一个和第二个值,使用索引方法,只需执行以下操作:
或者,在你的情况下:
^{pr2}$然而,最简单的解决方案是使用所谓的“元组解包”:
相当于:
这又相当于:
相关问题 更多 >
编程相关推荐