以下脚本是为基准目的而设置的.它使用欧几里德L2范数计算N个点之间的距离.实现了三种不同的例程:
scipy.spatial.distance.pdist功能的高级解决方案.scipy.weave.inline解决方案.以下是使用GTX660(2GB RAM)的i5-3470(16GB RAM)的基准测试结果:
------------
Scipy Pdist
Execution time: 3.01975 s
Frist five elements: [ 0.74968684 0.71457213 0.833188 0.48084545 0.86407363]
Last five elements: [ 0.65717077 0.76850474 0.29652017 0.856179 0.56074625]
------------
Weave Inline
Execution time: 2.48705 s
Frist five elements: [ 0.74968684 0.71457213 0.83318806 0.48084542 0.86407363]
Last five elements: [ 0.65717083 0.76850474 0.29652017 0.856179 0.56074625]
------------
pyCUDA
CUDA clock timing: 0.713028930664
Execution time: 2.04364 s
Frist five elements: [ 0.74968684 0.71457213 0.83318806 0.48084542 0.86407363] …Run Code Online (Sandbox Code Playgroud) 假设你有一个python集中的元组列表:
>>> pairs = set( [(0,1),(0,1),(1,0)] )
>>> print pairs
set([(0, 1), (1, 0)])
Run Code Online (Sandbox Code Playgroud)
显然,前两个元素是重复的,并且根据集合的定义,"对"仅包含唯一元素.
但是,在我的特定情况下,元组(i,j)定义了一个交互对.因此,(i,j)和(j,i)是相同的.我需要一种有效的方法来减少所有重复的元素.计算时间对我来说至关重要,因为总计很容易包含大到10**6的元素.我期待以下结果:
>>> pairs = set( [(0,1),(0,1),(1,0)] )
>>> pairs = remove_duplicate_interactions(pairs)
>>> print pairs
set([0,1]) or set([1,0])
Run Code Online (Sandbox Code Playgroud)
我很感激任何提示.
编辑:
有人询问了背景.这应该用于粒子模拟.由于对称条件,作用于j的粒子i的力与作用于i的j的力相同.因此,计算时间减少了50%.