Как отсортировать массив ячеек в Octave по столбцу с плавающей точкой? - PullRequest
6 голосов
/ 24 января 2012

Я создал массив ячеек в Октаве. Некоторые столбцы содержат числа с плавающей запятой, а некоторые столбцы содержат строки. Я могу отсортировать массив ячеек по столбцу строк (скажем, столбец № 4), используя эту команду:

sortrows (mycellarray, 4);

Но если столбец, по которому я хочу отсортировать, является столбцом с плавающей точкой , то я получаю это сообщение об ошибке:

error: sort: only cell arrays of character strings may be sorted

Кто-нибудь знает, как отсортировать массив ячеек по столбцу с плавающей точкой?

1 Ответ

6 голосов
/ 24 января 2012

Преобразовать столбец со значениями с плавающей точкой в ​​вектор, отсортировать его и получить индекс сортировки.Затем вы можете применить этот индекс к вашему массиву ячеек.

mycellarray = {'a',1,0.5; 'b',2,0.1; 'c',3,4.5; 'd',4,-3.2};
vector2sort=cell2mat(mycellarray(:,3));
[~,idx] = sort(vector2sort)
mycellarraysorted = mycellarray(idx,:);

Однако в некоторых версиях Octave оператор тильды ~ не определен.В этом случае:

vector2sort = mycellarray(:,3); 
[dummy,idx] = sort(vector2sort); 
mycellarraysorted = mycellarray(idx,:);
...