python - 在数组和元组之间转换时的舍入问题

标签 python numpy set

我有一个 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/

相关文章:

python - 多层前馈网络无法在 TensorFlow 中训练

设置和获取交集的 MySQL 字符串

python - 检查列表内字典之间的差异

python - 在 pandas 中优先过滤的最佳方法是什么?

python - 在另一个成对的bin数组中获取数据数组最小值的最快方法

python - 具有不同数据类型的 Numpy 数组

python - 如果忽略 SIGCHLD,Firefox Webdriver 将无法工作

python - Pandas 根据元素的类别拆分列

java - 使用 HashMap 获取重复出现的情况

c++ - 基于容器范围的构造函数效率