gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:52 25 4
gpt4 key购买 nike

编辑:这个问题不是专门关于计算距离,而是循环遍历 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com