Merge confusion matrices in nice, vectorized way.
Afficher commentaires plus anciens
Hello everyone,
I have several confusion matrices, which are a 2D cell array. The first row and the first columns are strings. The rest are numbers. Something like this:
MATRIX 1
A B C
A 100 10 15
B 20 150 25
C 10 10 200
MATRIX 2
A B D
A 150 5 10
B 10 100 15
D 15 15 100
MATRIX 3
B E
B 100 15
E 5 150
How can I merge the matrices in a vectorized way so the output is something like this?
DESIRED OUTPUT
A B C D E
A 250 15 15 10 0
B 30 350 25 15 15
C 10 10 200 0 0
D 15 15 0 100 0
E 0 5 0 0 150
Which means merge all the matrices into one, including the labels in the first row and the first column label. Where the rows and columns overlap, add them. I could do this with some loops, but I am interested in the nice, vectorized way :) .
Réponse acceptée
Plus de réponses (1)
Kelly Kearney
le 23 Août 2011
You might want to add a loop over the columns if your matrices will be varying sizes, but otherwise...
Your data:
m{1} = {...
'rowA.' 1 2 3
'rowB.' 1 2 3
'rowC.' 1 2 3};
m{2} = {...
'rowA.' 2 3 4
'rowD.' 2 3 4
'rowE.' 2 3 4};
m{3} = {...
'rowD.' 3 4 5
'rowF.' 3 4 5};
Combine matrices into one...
mall = cat(1, m{:});
lbl = mall(:,1);
data = cell2mat(mall(:,2:end));
... and sum by label:
[lbl, blah, idx] = unique(lbl);
data = [accumarray(idx, data(:,1)) ...
accumarray(idx, data(:,2)) ...
accumarray(idx, data(:,3))];
2 commentaires
Kelly Kearney
le 23 Août 2011
Hey, you changed your question and example completely while I was typing my answer!
Adriano
le 23 Août 2011
Catégories
En savoir plus sur Logical 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!