Convert distance matrix to a table
Afficher commentaires plus anciens
How can I convert the output matrix Z to a table with the following structure?
Object1 Object2 Distance
1 2 0.2954
1 3 1.0670
2 1 0.2954
2 3 0.9448
3 1 1.0670
3 2 0.9448
Code:
rng('default') % For reproducibility
X = rand(3,2);
D = pdist(X)
Z = squareform(D)
7 commentaires
Adam Danz
le 6 Juin 2019
Your data do not produce the example.
Z =
0 0.2954 1.067
0.2954 0 0.94476
1.067 0.94476 0
dan kin
le 6 Juin 2019
Adam Danz
le 6 Juin 2019
I set the RNG seed which should produce the same results. If you look carefully, you'll see that except for the 0s, the numbers in my Z are also in your example.
dan kin
le 6 Juin 2019
Adam Danz
le 6 Juin 2019
I don't know how you produced the matrix but to convert it to a table, see my answer below. If you need help producing the matrix, you'll have to provide more info about it.
Adam Danz
le 17 Juin 2019
Here's how to convert a matrix to a table and add column names.
m =[1 2 0.2954
1 3 1.0670
2 1 0.2954
2 3 0.9448
3 1 1.0670
3 2 0.9448];
t = array2table(m,'VariableNames', {'Object1','Object2','Distance'})
Akira Agata
le 18 Juin 2019
How about making a graph object?
rng('default') % For reproducibility
X = rand(3,2);
D = pdist(X);
Z = squareform(D);
G = graph(Z);
Then, G.Edges becomes almost what you want to obtain, like:
>> G.Edges
ans =
3×2 table
EndNodes Weight
________ _______
1 2 0.2954
1 3 1.067
2 3 0.94476
Réponses (1)
Akira Agata
le 18 Juin 2019
Or, if you want the full list of (from, to, distance) set, how about the following?
rng('default') % For reproducibility
X = rand(3,2);
D = pdist(X);
Z = squareform(D);
[row,col] = find(Z);
d = arrayfun(@(r,c) Z(r,c),row,col);
T = table(row,col,d,'VariableNames',{'Object1','Object2','Distance'});
T = sortrows(T);
The result is:
>> T
ans =
6×3 table
Object1 Object2 Distance
_______ _______ ________
1 2 0.2954
1 3 1.067
2 1 0.2954
2 3 0.94476
3 1 1.067
3 2 0.94476
Catégories
En savoir plus sur Tables dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!