Matlab Sort Command Output
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have an equation and the user enters certain numbers into this equation, then it gets x1 x2 x3 numbers but wants them in result with sort, I use the "sort" command for this, but "sort" writes the value of x1. I want the result to be in x1 x2 x3. For example, equation gives me
x1=3 x2=1 x3=2 a=[x1 x2 x3] sort (a) = 1 2 3
I want it to be x2 x3 x1. How can I do that?
0 commentaires
Réponses (2)
Tommy
le 14 Mai 2020
How about this?
x1=3;
x2=1;
x3=2;
a=[x1 x2 x3];
varNames = {'x1','x2','x3'};
[~, idx] = sort(a);
fprintf('Output:\n%s\n', strip(sprintf('%s ', varNames{idx})))
Prints:
Output:
x2 x3 x1
Or if you don't want to have to type the variable names, I guess you could do this?
fprintf(mySort(x1, x2, x3));
function s = mySort(varargin)
[~, idx] = sort(cell2mat(varargin));
s = cell(numel(idx),1);
for i = 1:numel(idx)
s{i} = inputname(idx(i));
end
s = sprintf('Output:\n%s\n', strip(sprintf('%s ', s{:})));
end
Which prints the same thing.
Stephen23
le 14 Mai 2020
Modifié(e) : Stephen23
le 14 Mai 2020
Using separate variables makes this rather complex.
It would be much simpler if you stored the data in arrays, e.g. in one table:
>> names = {'x1';'x2';'x3'};
>> values = [3;1;2];
>> T = table(names,values)
T =
names values
_____ ______
'x1' 3
'x2' 1
'x3' 2
>> T = sortrows(T,'values') % this is all you need
T =
names values
_____ ______
'x2' 1
'x3' 2
'x1' 3
Better data design -> simpler, neater, more efficient code.
Voir également
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!