Creating a three column table from matrix

25 vues (au cours des 30 derniers jours)
Colby
Colby le 5 Jan 2015
Commenté : Image Analyst le 5 Jan 2015
If I have a matrix, how can I make a table with three columns that are row number, column number, and then the value for that row-column? And then, add a 4th column with the row-column number? example in picture

Réponse acceptée

Julian Hapke
Julian Hapke le 5 Jan 2015
Hi,
because you want a string in your 4th column, you need a cell array. here's my q&d solution:
A=rand(3,3);
new = cell(numel(A),4);
kk=1;
for ii = 1:size(A,1);
for jj = 1:size(A,2);
new{kk,1}=ii;
new{kk,2}=jj;
new{kk,3}=A(ii,jj);
new{kk,4}=[num2str(ii) '-' num2str(jj)];
kk=kk+1;
end;
end
Regards
Julian
  2 commentaires
Colby
Colby le 5 Jan 2015
Thank you very much for your help!!!
Image Analyst
Image Analyst le 5 Jan 2015
Note: this solution does not give a table like you asked for, and like the two other solutions give. Tables are a useful new data type introduced in release R2013b.

Connectez-vous pour commenter.

Plus de réponses (2)

Image Analyst
Image Analyst le 5 Jan 2015
Try this:
row = [1;1;1;2;2;2;3;3;3]
column = repmat([1:3]', [3, 1])
value = [1;2;3;6;7;8;11;12;13]
table1 = table(row, column, value)
% Now make a second table with an additional column of strings.
for k = 1 : length(row)
rMinusc{k} = sprintf('%d - %d', row(k), column(k));
end
rMinusc = rMinusc'; % Transpose
table2 = table(row, column, value, rMinusc)
In the command window:
table2 =
row column value rMinusc
___ ______ _____ _______
1 1 1 '1 - 1'
1 2 2 '1 - 2'
1 3 3 '1 - 3'
2 1 6 '2 - 1'
2 2 7 '2 - 2'
2 3 8 '2 - 3'
3 1 11 '3 - 1'
3 2 12 '3 - 2'
3 3 13 '3 - 3'
  1 commentaire
Colby
Colby le 5 Jan 2015
Thanks a lot for your help!!!

Connectez-vous pour commenter.


Jorge
Jorge le 5 Jan 2015
Modifié(e) : Jorge le 5 Jan 2015
Should be something like this. Didn't run it, though... The table you seek is in columns. Use table() to arrange.
[n,m]=size(matrix);
counter=0;
for i=1:n
for j=1:m
counter=counter+1;
rows(counter)=i;
columns(counter)=j;
values(counter)=matrix(i,j);
rc{counter}=strcat(i,'-',j)
end
end
table=[rows columns values rc];
  1 commentaire
Colby
Colby le 5 Jan 2015
Thanks a lot for the help!!!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by