- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我一直在从事一个对时间非常敏感的项目(不幸的是它必须在 python 中),并且广泛使用的函数之一是计算 (x, y) 列表的质心的函数元组。举例说明:
def centroid(*points):
x_coords = [p[0] for p in points]
y_coords = [p[1] for p in points]
_len = len(points)
centroid_x = sum(x_coords)/_len
centroid_y = sum(y_coords)/_len
return [centroid_x, centroid_y]
在哪里
>>> centroid((0, 0), (10, 0), (10, 10), (0, 10))
[5, 5]
这个函数运行得相当快,上面的例子在我的系统上平均在 1.49e-05 秒内完成,但我正在寻找计算质心的最快方法。你有什么想法吗?
我的其他解决方案之一是执行以下操作(其中 l
是元组列表):
map(len(l).__rtruediv__, map(sum, zip(*l)))
在 1.01e-05 和 9.6e-06 秒之间运行,但不幸的是转换为一个列表(通过将整个语句包围在 list( ... )
中)几乎是双倍的 计算时间。
编辑:在纯 python 中欢迎建议,但不是 numpy。
EDIT2:刚刚发现如果为元组列表的长度保留一个单独的变量,那么我上面的 map
实现在 9.2e-06 秒内可靠地运行,但仍然存在转换回列表的问题。
EDIT3:
现在我只接受纯 python 中的答案,而不是 numpy(对不起那些已经用 numpy 回答的人!)
最佳答案
import numpy as np
data = np.random.randint(0, 10, size=(100000, 2))
这里很快
def centeroidnp(arr):
length = arr.shape[0]
sum_x = np.sum(arr[:, 0])
sum_y = np.sum(arr[:, 1])
return sum_x/length, sum_y/length
%timeit centeroidnp(data)
10000 loops, best of 3: 181 µs per loop
令人惊讶的是,这要慢得多:
%timeit data.mean(axis=0)
1000 loops, best of 3: 1.75 ms per loop
numpy 对我来说似乎很快......
为了完整性:
def centeroidpython(data):
x, y = zip(*data)
l = len(x)
return sum(x) / l, sum(y) / l
#take the data conversion out to be fair!
data = list(tuple(i) for i in data)
%timeit centeroidpython(data)
10 loops, best of 3: 57 ms per loop
关于python - 在没有numpy的情况下计算python中一组坐标元组的质心的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23020659/
前言 一年一度的虐狗节终于过去了,朋友圈各种晒,晒自拍,晒娃,晒美食,秀恩爱的。程序员在晒什么,程序员在加班。但是礼物还是少不了的,送什么好?作为程序员,我准备了一份特别的礼物,用以往发的微博数据
默认情况下,我有一个 V3 map 加载并以特定的经度/纬度为中心。加载后,用户可以输入他们的地址以获取前往该地点的路线。发生这种情况时, map 会调整大小以适应其左侧的方向框。因此,路线在 map
我是一名优秀的程序员,十分优秀!