сортировать столбцы в Matlab - PullRequest
5 голосов
/ 24 декабря 2011

У меня есть 2 столбца данных, импортированных с использованием textcan.Данные выглядят так, где U равно необнаружено и D равно определено

mydata=

.51 U
.57 D
.48 U
.47 D

 my data = [4x1 double]    [4x1 char]

Я хочу отсортироватьданные по первому столбцу, и поэтому данные будут выглядеть следующим образом

.47  D
.48  U
.51  U    
.57  D

Я хотел бы сохранить структуру ячейки, чтобы следующая команда для назначения логического значения оставалась верной:

c = zeros(size(mydata,1),1); % preallocate empty matrix 

c = mydata{2} == 'U';
for i = 1:size(mydata,1)
      curValue = mydata{i,2};
      data{i,3} =  ~isempty(curValue) && ischar(curValue) && strcmp(curValue ,'U');
end

Я читал о sortrows, но функция используется для сортировки матрицы, содержащей только числа.

У кого-нибудь есть решение для сортировки массивов со смесью цифр и символов.

Ответы [ 2 ]

8 голосов
/ 24 декабря 2011

Вы можете SORT по одному вектору и применить индекс сортировки к другому вектору.

[mydata{1},idx] = sort(mydata{1});
mydata{2} =  mydata{2}(idx);
2 голосов
/ 24 декабря 2011

Я не думаю, что вы можете напрямую отсортировать массив ячеек, потому что каждая ячейка считается отдельной "сущностью". Вы всегда можете отсортировать числа, использовать индексы для сортировки символов, а затем поместить их обратно в массив ячеек:

nums = mydata{1};
chars = mydata{2};
[~, ind] = sort(nums);
sortednums = nums(ind);
sortedchars = chars(ind);
mydata{1} = sortednums;
mydata{2} = sortedchars;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...