Sorting a cell array of strings on dim

7 Ansichten (letzte 30 Tage)
Noushin Farnoud
Noushin Farnoud am 15 Dez. 2015
Bearbeitet: per isakson am 18 Dez. 2015
Hello All,
Is there a way I can sort along the 2nd dim of a cell array of strings? When I apply sort(x,2) on the example below, I receive the error msg: DIM and MODE arguments not supported for cell arrays.
I have:
x={'book','apple';'dood','tood';'soon','moon'}
x =
'book' 'apple'
'dood' 'tood'
'soon' 'moon'
I want to sort it on 2nd dim, so that I get:
sorted_x=
'apple' 'book'
'dood' 'tood'
'moon' 'soon'
I greatly appreciate your response.
Noushin

Akzeptierte Antwort

Guillaume
Guillaume am 17 Dez. 2015
Transpose the cell array, sort, and transpose back:
x = {'book','apple';'dood','tood';'soon','moon'};
sorted_x = sort(x')'
  2 Kommentare
Guillaume
Guillaume am 17 Dez. 2015
A generic version of this:
function sorted_c = sort_cell(c, dim)
%c: an Nd cell array
%dim: dimension to sort
permdims = 1:ndims(c);
permdims([1 dim]) = permdims([dim 1]);
sorted_c = permute(sort(permute(c, permdims)), permdims);
end
Stephen23
Stephen23 am 17 Dez. 2015
+1 very tidy solution.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

per isakson
per isakson am 15 Dez. 2015
Bearbeitet: per isakson am 18 Dez. 2015
2015-12-18: Fixed a "typo". With R2013a.
Loop over all rows and concatenate
cac = arrayfun( @(jj) sort(x(jj,:)), (1:size(x,1)), 'uni', false )
sorted_x = cat( 1, cac{:} )
outputs
cac =
{1x2 cell} {1x2 cell} {1x2 cell}
sorted_x =
'apple' 'book'
'dood' 'tood'
'moon' 'soon'

Kategorien

Mehr zu Shifting and Sorting Matrices 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!

Translated by