小编Rak*_* S.的帖子

在N点之间的距离计算中,令人失望的结果是pyCUDA基准

以下脚本是为基准目的而设置的.它使用欧几里德L2范数计算N个点之间的距离.实现了三种不同的例程:

  1. 使用该scipy.spatial.distance.pdist功能的高级解决方案.
  2. 相当低级别的OpenMP驱动scipy.weave.inline解决方案.
  3. pyCUDA支持GPGPU解决方案.

以下是使用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 cuda scipy pycuda

6
推荐指数
1
解决办法
1412
查看次数

删除python集中的重复交互对

假设你有一个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%.

python tuples set

4
推荐指数
1
解决办法
7148
查看次数

标签 统计

python ×2

cuda ×1

pycuda ×1

scipy ×1

set ×1

tuples ×1