我有一个 2 元素列表的嵌套列表(纬度/经度坐标)
xlist = [[-75.555476, 42.121701],
[-75.552684, 42.121725],
[-75.55268, 42.122023],
[-75.55250199999999, 42.125071999999996],
[-75.552611, 42.131277] ... ]
我想将其转换为集合。然而,在进行转换之前,我确实想将这些值舍入到较低的精度,以便我可以对其他类似列表执行集合操作并查找两个列表的共同点。
我可以用 numpy 进行舍入,
x = np.round( xlist, decimals = 4 )
array([[-75.5555, 42.1217],
[-75.5527, 42.1217],
[-75.5527, 42.122 ],
...,
[-75.5552, 42.1086],
[-75.5553, 42.1152],
[-75.5555, 42.1217]])
但结果对象是一个 numpy 数组,我无法将其转换为集合
s = set( x )
TypeError: unhashable type: 'numpy.ndarray'
我尝试将数组转换回元组的元组
t = ( tuple( row ) for row in x )
但这会对转换的精度造成不良影响
t.next()
(-75.555499999999995, 42.121699999999997)
我也尝试过一步完成此操作,但没有成功
map( tuple, np.round( x, decimals =5 ) )
[(-75.555480000000003, 42.121699999999997),
(-75.552679999999995, 42.121720000000003),
(-75.552679999999995, 42.122019999999999),
(-75.552499999999995, 42.125070000000001)]
关于元组和数组之间的转换,我是否遗漏了什么?如何从列表获取其项目四舍五入到较低精度的集合?
是否建议使用带有 float 元素的集合?
最佳答案
我认为你问题的核心是你无法创建一个带有 2D 列表的集合...试试这个:
xlist = [[-75.555476, 42.121701],
[-75.552684, 42.121725],
[-75.55268, 42.122023],
[-75.55250199999999, 42.125071999999996],
[-75.552611, 42.131277]]
x = []
for i in xlist:
x.append( [round(i[0],4) , round(i[1],4)] )
s = map(set,x)
关于python - 在数组和元组之间转换时的舍入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18905113/