python - 计算 numpy 数组成对的欧几里德距离,除了 self

标签 python arrays numpy iteration euclidean-distance

编辑:这个问题不是专门关于计算距离,而是循环遍历 numpy 数组的最有效方法,指定对于索引 i 所有比较都应该与数组的其余部分进行,只要第二个索引是不是我。

我有一个包含列 (X, Y, ID) 的 numpy 数组,我想将每个元素与其他元素进行比较,但不比较它本身。因此,对于每个 X、Y 坐标,我想计算彼此 X、Y 坐标之间的距离,而不是自身(距离 = 0)的距离。

这就是我所拥有的 - 必须有一种更“ NumPy ”的方式来写这个。

import math, arcpy
# Point feature class
fc = "MY_FEATURE_CLASS"
# Load points to numpy array: (X, Y, ID)
npArray = arcpy.da.FeatureClassToNumPyArray(fc,["SHAPE@X","SHAPE@Y","OID@"])
for row in npArray:
    for row2 in npArray:
        if row[2] != row2[2]:
            # Pythagoras's theorem
            distance = math.sqrt(math.pow((row[0]-row2[0]),2)+math.pow((row[1]-row2[1]),2))

显然,我是一个 NumPy 的新手。发现这是重复的我不会感到惊讶,但我没有 numpy 词汇来搜索答案。任何帮助表示赞赏!

最佳答案

使用 SciPy 的 pdist ,你可以这样写

from scipy.spatial.distance import pdist, squareform

distances = squareform(pdist(npArray, lambda a,b: np.sqrt((a[0]-b[0])**2 + (a[1]-b[1])**2)))

pdist 将使用忽略第三个坐标(在本例中为您的 ID)的自定义度量来计算成对距离。 squareform 将其转换为更具可读性的矩阵,例如 distances[0,1] 给出第 0 行和第 1 行之间的距离。

关于python - 计算 numpy 数组成对的欧几里德距离,除了 self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29132417/

相关文章:

python - 从字典中的键中检索键

python - 我正在使用显示错误 : "maximum recursion depth exceeded in cmp" 的 Sphinx 文档工具

python - 无法在 python 2.7 上安装 pip,只有 python 3

numpy - 分两步训练数据,精度相同吗?

Python:ufloat float

python - 将 pandas 系列的 numpy 矩阵转换为多索引系列

python - 通过 Python 使用 Google Cloud Function 时,我可以部署一个常用函数吗?

python - numpy 数组的形状

java - 单个数组在每个元素中存储多个变量

arrays - 如何使用数据类型为array <struct <int >>的列插入Hive表