gpt4 book ai didi

Python,使用 argsort 的关系问题

转载 作者:行者123 更新时间:2023-12-01 03:12:58 27 4
gpt4 key购买 nike

我在使用函数 argsort 对 2D 数组进行排序时遇到以下问题。

更准确地说,假设我有 5 个点,并计算了它们之间的欧氏距离,这些距离存储在二维数组 D 中:

D=np.array([[0,0.3,0.4,0.2,0.5],[0.3,0,0.2,0.6,0.1],
[0.4,0.2,0,0.5,0],[0.2,0.6,0.5,0,0.7],[0.5,0.1,0,0.7,0]])
D
array([[ 0. , 0.3, 0.4, 0.2, 0.5],
[ 0.3, 0. , 0.2, 0.6, 0.1],
[ 0.4, 0.2, 0. , 0.5, 0. ],
[ 0.2, 0.6, 0.5, 0. , 0.7],
[ 0.5, 0.1, 0. , 0.7, 0. ]])

每个元素D[i,j] (i,j=0,...,4)显示点i和点j之间的距离。对角线条目当然等于零,因为它们显示了点到自身的距离。但是,可以有 2 个或更多点重叠。例如,在本例中,点 4 与点 2 位于同一位置,因此距离 D[2,4]D[4,2] 等于 0。

现在,我想对这个数组D进行排序:对于每个点i,我想知道其相邻点的索引,从最近到最远。当然,对于给定点i,排序数组中的第一个点/索引应该是i,即距离点1最近的点是1。我使用了函数argsort:

N = np.argsort(D)
N
array([[0, 3, 1, 2, 4],
[1, 4, 2, 0, 3],
[2, 4, 1, 0, 3],
[3, 0, 2, 1, 4],
[2, 4, 1, 0, 3]])

此函数对距离进行正确排序,直到到达点 4:第 4 行的第一个条目(从零开始计数)不是 4 (D [4,4]=0)如我所愿。我希望第四行是 [4, 2, 1, 0, 3]。第一个条目是 2,因为点 24 重叠,因此 D[2,4]=D[4,2 ],以及相同值条目 D[2,4]=0D[4,2]=0 之间,argsort 始终选择第一个。

有没有办法解决这个问题,以便 D[i,j] 的排序数组 N[i,j] 始终以与对角线条目 D[i,i]=0?

感谢您的帮助,马尔科·C

最佳答案

一种方法是用小于全局最小值的元素填充对角线元素,然后使用 argsort -

In [286]: np.fill_diagonal(D,D.min()-1) # Or use -1 for filling
# if we know beforehand that the global minimum is 0

In [287]: np.argsort(D)
Out[287]:
array([[0, 3, 1, 2, 4],
[1, 4, 2, 0, 3],
[2, 4, 1, 0, 3],
[3, 0, 2, 1, 4],
[4, 2, 1, 0, 3]])

如果您不想更改输入数组,请复制一份,然后进行对角线填充。

关于Python,使用 argsort 的关系问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42716877/

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