在时间序列数据中,我具有在二维网格上演化的对象的(x,y)坐标。例如:
(41.797, 34.0),
(42.152, 34.56),
(42.383, 36.07),
(42.505, 37.97)
如何以array [x,y] = object_id的方式索引数组。随后,我需要再次遍历此时间索引的二维网格,并索引array [x',y'] = object_id_2。 x'和y'就像上面的列表。
答案 0 :(得分:0)
这里有一些问题。
首先,您不能按浮点数编制索引,因为它没有任何意义。 其次,如果可以的话,解释/计算浮点数的方式存在问题(有时您的结果类似于3.99999999而不是4的原因)。
我的建议是使用四舍五入到小数位数的字典来索引您的值。这样,您将确保您的数据始终匹配!
由于无法通过不可变的键映射内容,因此需要一个元组。
如何工作的示例:
mydict = {}
a = (41.797, 34.0)
object_a = 'A'
b = (42.152, 34.56)
object_b 'B'
mydict[round(a[0], 3), round(a[1], 3)] = object_a
mydict[round(b[0], 3), round(b[1], 3)] = object_b
print ( my_dict[round(a[0], 3), round(a[1], 3)] )
print ( my_dict[round(b[0], 3), round(b[1], 3)] )
>> 'A'
>> 'B'
如果要更新对象,只需使用四舍五入的元组
mydict[round(a[0], 3), round(a[1], 3)] = 'CHICKEN'
print ( my_dict[round(a[0], 3), round(a[1], 3)] )
print ( my_dict[round(b[0], 3), round(b[1], 3)] )
>> 'CHICKEN'
>> 'B'
如果代码太凌乱,只需在圆元组中添加一个函数:
def round_tuple(tupl, decimals=3):
return round(tupl[0], decimals), round(tupl[1], decimals)
This way you just do this:
target = round_tuple(tup)
mydict[target] = 'CHICKEN'