如何将浮点索引赋予numpy ndarray?

时间:2018-12-20 20:39:59

标签: python numpy

在时间序列数据中,我具有在二维网格上演化的对象的(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'就像上面的列表。

1 个答案:

答案 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'