Sorting a cell array of strings on dim

25 vues (au cours des 30 derniers jours)
Noushin Farnoud
Noushin Farnoud le 15 Déc 2015
Modifié(e) : per isakson le 18 Déc 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

Réponse acceptée

Guillaume
Guillaume le 17 Déc 2015
Transpose the cell array, sort, and transpose back:
x = {'book','apple';'dood','tood';'soon','moon'};
sorted_x = sort(x')'
  2 commentaires
Guillaume
Guillaume le 17 Déc 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 le 17 Déc 2015
+1 very tidy solution.

Connectez-vous pour commenter.

Plus de réponses (1)

per isakson
per isakson le 15 Déc 2015
Modifié(e) : per isakson le 18 Déc 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'

Catégories

En savoir plus sur Shifting and Sorting Matrices 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