小编典典

凝聚矩阵函数寻找对

algorithm

对于一组观察结果:

[a1,a2,a3,a4,a5]

他们的成对距离

d=[[0,a12,a13,a14,a15]
   [a21,0,a23,a24,a25]
   [a31,a32,0,a34,a35]
   [a41,a42,a43,0,a45]
   [a51,a52,a53,a54,0]]

以压缩矩阵形式给出(上述的上三角,由计算 scipy.spatial.distance.pdist):

c=[a12,a13,a14,a15,a23,a24,a25,a34,a35,a45]

问题是,假设我在压缩矩阵中有索引,是否有一个函数(最好在python中) f 可以快速给出用于计算它们的两个观测值?

f(c,0)=(1,2)
f(c,5)=(2,4)
f(c,9)=(4,5)
...

我已经尝试了一些解决方案,但是没有值得一提的:(


阅读 264

收藏
2020-07-28

共1个答案

小编典典

您可能会发现triu_indices有用。喜欢,

In []: ti= triu_indices(5, 1)
In []: r, c= ti[0][5], ti[1][5]
In []: r, c
Out[]: (1, 3)

请注意,索引从0开始。您可以根据需要对其进行调整,例如:

In []: def f(n, c):
   ..:     n= ceil(sqrt(2* n))
   ..:     ti= triu_indices(n, 1)
   ..:     return ti[0][c]+ 1, ti[1][c]+ 1
   ..:
In []: f(len(c), 5)
Out[]: (2, 4)
2020-07-28