Python numpy距离矩阵,按值顺序迭代索引,无[i,j]和[j,i] 距离矩阵=np.数组([[0,2,3,2], [2,0,5,8], [3,5,0,4], [2,8,4,0]]) 排序的\u numpy\u idx=np.argsort(距离矩阵,轴=无) idx\u to\u iterate=np.column\u堆栈(np.unravel\u索引(排序的\u numpy\u idx[::],距离矩阵形状)) 打印(idx到迭代) [[0 0] [1 1] [2 2] [3 3] [0 1] [0 3] [1 0] [3 0] [0 2] [2 0] [2 3] [3 2] [1 2] [2 1] [1 3] [3 1]]

Python numpy距离矩阵,按值顺序迭代索引,无[i,j]和[j,i] 距离矩阵=np.数组([[0,2,3,2], [2,0,5,8], [3,5,0,4], [2,8,4,0]]) 排序的\u numpy\u idx=np.argsort(距离矩阵,轴=无) idx\u to\u iterate=np.column\u堆栈(np.unravel\u索引(排序的\u numpy\u idx[::],距离矩阵形状)) 打印(idx到迭代) [[0 0] [1 1] [2 2] [3 3] [0 1] [0 3] [1 0] [3 0] [0 2] [2 0] [2 3] [3 2] [1 2] [2 1] [1 3] [3 1]],python,numpy,Python,Numpy,行和列按位置A->D排序,因此: A和A之间的距离是距离矩阵[0:0] A和B之间的距离是距离矩阵[0:1] B和A之间的距离是距离矩阵[1:0] 位置本身(A,A)之间的距离将始终为0,这将是唯一为0的值 反向距离始终相同,即A->B==B->A,但不同位置对之间会有重复的距离值,即在本例中A->B=2,A->D=2 行和列的顺序很重要,因为我使用此索引引用其他数据 我想根据值顺序(如上所述)迭代索引对,但不包括0个VAL(不太重要)并避免重复,例如[0,1]和[1,0],因为它们都引用相

行和列按位置A->D排序,因此:

A和A之间的距离是距离矩阵[0:0]

A和B之间的距离是距离矩阵[0:1]

B和A之间的距离是距离矩阵[1:0]

  • 位置本身(A,A)之间的距离将始终为0,这将是唯一为0的值

  • 反向距离始终相同,即A->B==B->A,但不同位置对之间会有重复的距离值,即在本例中A->B=2,A->D=2

  • 行和列的顺序很重要,因为我使用此索引引用其他数据

我想根据值顺序(如上所述)迭代索引对,但不包括0个VAL(不太重要)并避免重复,例如[0,1]和[1,0],因为它们都引用相同的位置对(A->B和B->A),我只需要其中一个,而不是两个


有没有一种方法可以使用numpy将
idx\u精简为\u iterate
,或者这是构造此数据的更好方法?对于其他函数,我仍然需要在两个顺序中保留“副本”。

最简单的方法是检查
(I,j)
(j,I)
对是否已经计算过。现在,我已经将
[j,I]
版本的位置对归零,切片
idx_to_迭代
[(零计数):,:]跳过不需要的索引对(所有现在值为0的索引对)并更新其他函数以引用
[i,j]
。最简单的方法是检查位置对的
(i,j)
(j,i)
是否已计算。目前,我已将
[j,i]
版本归零,切片
idx\u迭代
[(零计数):,:]跳过不需要的索引对(所有现在值为0的索引对),并更新其他函数以引用
[i,j]