Condensed matrix function to find pairs

algorithm, math, python, scipy, statistics

Solution

You may find triu_indices useful. Like,

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

Just notice that indices starts from 0. You may adjust it as you like, for example:

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)

Problem

For a set of observations: ``` [a1,a2,a3,a4,a5] ``` their pairwise distances ``` 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]] ``` Are given in a condensed matrix form (upper triangular of the above, calculated from `scipy.spatial.distance.pdist` ): ``` c=[a12,a13,a14,a15,a23,a24,a25,a34,a35,a45] ``` The question is, given that I have the index in the condensed matrix is there a function (in python preferably) f to quickly give which two observations were used to calculate them? ``` f(c,0)=(1,2) f(c,5)=(2,4) f(c,9)=(4,5) ... ``` I have tried some solutions but none worth mentioning :(

Original source

Related problems