Convert distance matrix to a table
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Adam Danz
am 17 Jun. 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
am 18 Jun. 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
Antworten (1)
Akira Agata
am 18 Jun. 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
0 Kommentare
Siehe auch
Kategorien
Mehr zu Tables finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!