How to sort data once it is read into matlab
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I am trying to sort the attached file first by column 1, then by column 3. I have tried the following code:
fid = fopen(filename);
data = textscan(fid, '%s %f %f');
fclose(fid);
matrix_data = [data{:}];
sort_data = sortrows(matrix_data, [1,3]);
This tells me that CAT arguments dimensions are not consistent.
Could someone tell me what is wrong with this code?
Thanks.
1 Kommentar
Akzeptierte Antwort
Cedric
am 18 Okt. 2013
Bearbeitet: Cedric
am 18 Okt. 2013
The first column of data is a cell array of strings, whereas columns 2 and 3 are numeric arrays. You cannot concatenate them without performing first a conversion. You can also convert numeric arrays to cell arrays and have both strings and numbers in a large cell array. E.g.
matrix_data = [data{1}, num2cell(data{2}), num2cell(data{3})] ;
or
matrix_data = [data{1}, num2cell([data{2:3}])] ;
that you can then sort:
>> sort_data = sortrows(matrix_data, [1,3])
sort_data =
'A88888888888888888880011' [-65] [ 1]
'A88888888888888888880011' [-52] [ 2]
'A88888888888888888880011' [-64] [ 3]
'A88888888888888888880011' [-52] [ 4]
'A88888888888888888880011' [-57] [ 5]
'A88888888888888888880011' [-65] [ 6]
'A88888888888888888880011' [-57] [ 7]
'A88888888888888888880011' [-55] [ 8]
'A88888888888888888880012' [-66] [ 9]
'A88888888888888888880012' [-52] [10]
'A88888888888888888880012' [-68] [11]
'A88888888888888888880012' [-64] [12]
'A88888888888888888880012' [-44] [13]
'A88888888888888888880012' [-64] [14]
'A88888888888888888880012' [-40] [15]
'A88888888888888888880012' [-51] [16]
'A88888888888888888880013' [-55] [17]
'A88888888888888888880013' [-57] [18]
'A88888888888888888880013' [-49] [19]
'A88888888888888888880013' [-47] [20]
'A88888888888888888880013' [-64] [21]
'A88888888888888888880013' [-60] [22]
'A88888888888888888880013' [-67] [23]
'A88888888888888888880013' [-61] [24]
0 Kommentare
Weitere Antworten (1)
Vivek Selvam
am 18 Okt. 2013
This should solve your problem.
data = textscan(fid, '%s %s %s');
instead of
data = textscan(fid, '%s %f %f');
Siehe auch
Kategorien
Mehr zu Cell Arrays 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!