numpy中两个列表上的成对运算(距离)

TDN169

我有两个坐标列表:

l1 = [[x,y,z],[x,y,z],[x,y,z],[x,y,z],[x,y,z]]
l2 = [[x,y,z],[x,y,z],[x,y,z]]

我想找到l1和l2之间的最短成对距离。两个坐标之间的距离就是:

numpy.linalg.norm(l1_element - l2_element)

那么,如何使用numpy有效地将此操作应用于每对元素?

皮特

这是到目前为止介绍的四种方法的快速性能分析:

import numpy
import scipy
from itertools import product
from scipy.spatial.distance import cdist
from scipy.spatial import cKDTree as KDTree

n = 100
l1 = numpy.random.randint(0, 100, size=(n,3))
l2 = numpy.random.randint(0, 100, size=(n,3))

# by @Phillip
def a(l1,l2):
    return min(numpy.linalg.norm(l1_element - l2_element) for l1_element,l2_element in product(l1,l2))

# by @Kasra
def b(l1,l2):
    return numpy.min(numpy.apply_along_axis(
        numpy.linalg.norm,
        2,
        l1[:, None, :] - l2[None, :, :]
    ))

# mine
def c(l1,l2):
    return numpy.min(scipy.spatial.distance.cdist(l1,l2))

# just checking that numpy.min is indeed faster.
def c2(l1,l2):
    return min(scipy.spatial.distance.cdist(l1,l2).reshape(-1))

# by @BrianLarsen
def d(l1,l2):
    # make KDTrees for both sets of points
    t1 = KDTree(l1)
    t2 = KDTree(l2)
    # we need a distance to not look beyond, if you have real knowledge use it, otherwise guess
    maxD = numpy.linalg.norm(l1[0] - l2[0]) # this could be closest but anyhting further is certainly not
    # get a sparce matrix of all the distances

    ans = t1.sparse_distance_matrix(t2, maxD)

    # get the minimum distance and points involved
    minD = min(ans.values())
    return minD

for x in (a,b,c,c2,d):
    print("Timing variant", x.__name__, ':', flush=True)
    print(x(l1,l2), flush=True)
    %timeit x(l1,l2)
    print(flush=True)

为了 n=100

Timing variant a :
2.2360679775
10 loops, best of 3: 90.3 ms per loop

Timing variant b :
2.2360679775
10 loops, best of 3: 151 ms per loop

Timing variant c :
2.2360679775
10000 loops, best of 3: 136 µs per loop

Timing variant c2 :
2.2360679775
1000 loops, best of 3: 844 µs per loop

Timing variant d :
2.2360679775
100 loops, best of 3: 3.62 ms per loop

为了 n=1000

Timing variant a :
0.0
1 loops, best of 3: 9.16 s per loop

Timing variant b :
0.0
1 loops, best of 3: 14.9 s per loop

Timing variant c :
0.0
100 loops, best of 3: 11 ms per loop

Timing variant c2 :
0.0
10 loops, best of 3: 80.3 ms per loop

Timing variant d :
0.0
1 loops, best of 3: 933 ms per loop

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在列表的两个列表上使用成对的pmin()

来自分类Dev

在成对对象的两个numpy数组上应用成对的成对函数

来自分类Dev

在两个numpy向量中的成对元素上用函数填充矩阵的最快方法?

来自分类Dev

在两个numpy向量中的成对元素上用函数填充矩阵的最快方法?

来自分类Dev

计算numpy中两个向量之间的成对差异?

来自分类Dev

计算列表中两个项目之间的距离

来自分类Dev

在两个numpy ndarray上的数值运算

来自分类Dev

在Numpy下对两个矩阵中的所有成对行应用函数

来自分类Dev

在两个列表中的矩阵之间执行成对回归分析

来自分类Dev

来自 Python 中具有条件的两个列表的成对组合

来自分类Dev

对两个numpy ndarray的数值运算

来自分类Dev

将成对的序列分为两个列表?

来自分类Dev

将两个参数函数应用于列表以使用NumPy生成对称矩阵

来自分类Dev

将两个参数函数应用于列表以使用NumPy生成对称矩阵

来自分类Dev

计算两个整数矩阵/数据帧的所有行之间的成对汉明距离

来自分类Dev

识别重复的单词并获取两个单词之间的距离作为python中的列表

来自分类Dev

生成器,可确保列表中两个项目之间的最小距离

来自分类Dev

计算两个numpy数组之间的距离

来自分类Dev

使用numpy确定两个矩阵之间的距离

来自分类Dev

在成对的两个元素中搜索String

来自分类Dev

本征中两个矩阵之间的成对差异

来自分类Dev

球拍:从两个清单中制作成对清单

来自分类Dev

Haskell中数字列表的成对距离

来自分类Dev

Python:两个列表之间的成对比较:列表a> =列表b?

来自分类Dev

访问距离矩阵中的特定成对距离(scipy / numpy)

来自分类Dev

如何将成对的两个单词存储在成对的结构中?

来自分类Dev

在两个列表中应用运算符的C#惯用方式是什么?

来自分类Dev

两个列表之间的IN运算符在oracle中不起作用

来自分类Dev

成对添加两个列表,使源列表之一发生变异

Related 相关文章

  1. 1

    在列表的两个列表上使用成对的pmin()

  2. 2

    在成对对象的两个numpy数组上应用成对的成对函数

  3. 3

    在两个numpy向量中的成对元素上用函数填充矩阵的最快方法?

  4. 4

    在两个numpy向量中的成对元素上用函数填充矩阵的最快方法?

  5. 5

    计算numpy中两个向量之间的成对差异?

  6. 6

    计算列表中两个项目之间的距离

  7. 7

    在两个numpy ndarray上的数值运算

  8. 8

    在Numpy下对两个矩阵中的所有成对行应用函数

  9. 9

    在两个列表中的矩阵之间执行成对回归分析

  10. 10

    来自 Python 中具有条件的两个列表的成对组合

  11. 11

    对两个numpy ndarray的数值运算

  12. 12

    将成对的序列分为两个列表?

  13. 13

    将两个参数函数应用于列表以使用NumPy生成对称矩阵

  14. 14

    将两个参数函数应用于列表以使用NumPy生成对称矩阵

  15. 15

    计算两个整数矩阵/数据帧的所有行之间的成对汉明距离

  16. 16

    识别重复的单词并获取两个单词之间的距离作为python中的列表

  17. 17

    生成器,可确保列表中两个项目之间的最小距离

  18. 18

    计算两个numpy数组之间的距离

  19. 19

    使用numpy确定两个矩阵之间的距离

  20. 20

    在成对的两个元素中搜索String

  21. 21

    本征中两个矩阵之间的成对差异

  22. 22

    球拍:从两个清单中制作成对清单

  23. 23

    Haskell中数字列表的成对距离

  24. 24

    Python:两个列表之间的成对比较:列表a> =列表b?

  25. 25

    访问距离矩阵中的特定成对距离(scipy / numpy)

  26. 26

    如何将成对的两个单词存储在成对的结构中?

  27. 27

    在两个列表中应用运算符的C#惯用方式是什么?

  28. 28

    两个列表之间的IN运算符在oracle中不起作用

  29. 29

    成对添加两个列表,使源列表之一发生变异

热门标签

归档