【发布时间】:2016-06-13 12:37:46
【问题描述】:
我有一个包含数百万行的数据框“数据”。每行都有坐标('x','y'),我想以python可以提供的最有效的方式计算连续坐标对之间的距离。并行化在这里有帮助吗?
我在这里看到了建议使用 cython 的方法。但是,我只想查看 python 解决方案。
这是我的数据的 sn-p
points =
[(26406, -6869),
(27679, -221),
(27679, -221),
(26416, -6156),
(26679, -578),
(26679, -580),
(27813, -558),
(26254, -1097),
(26679, -580),
(27813, -558),
(28258, -893),
(26253, -1098),
(26678, -581),
(27811, -558),
(28259, -893),
(26252, -1098),
(27230, -481),
(26679, -582),
(27488, -5849),
(27811, -558),
(28259, -893),
(26250, -1099),
(27228, -481),
(26679, -582),
(27488, -5847),
(28525, -1465),
(27811, -558),
(28259, -892)]
我相信我第一个使用 for-loop 的方法肯定可以改进:
from scipy.spatial import distance
def comp_dist(points):
size =len(points)
d = 0
i=1
for i in range(1,size):
if i%1000000==0:
print i
# print "i-1:", points[i-1]
# print "i: ", points[i]
dist = distance.euclidean(points[i-1],points[i])
d= d+dist
print d
distance = comp_dist(points)
提前感谢您的回答。
【问题讨论】:
-
使用 numpy 会比您当前的解决方案更快,并且比 Cython 更容易实现。不过,它不会为您提供并行化(例如,它可能会针对您的 CPU 进行优化)。
-
如果你要走多处理路线,你需要将你的大列表分成块,处理它们,然后在最后合并它们
-
你认为它会提高性能吗?
-
这取决于数据的大小,并行启动作业是有成本的,但随着数据大小的增加,这会抵消。如果您的任务在几毫秒内完成,那通常是不值得的
-
我有4900万个坐标
标签: python performance parallel-processing