在Matlab中对列进行排序

时间:2011-12-23 20:06:16

标签: matlab

我使用textscan导入了2列数据。数据看起来像 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 个答案:

答案 0 :(得分:8)

您可以通过一个向量SORT并将排序索引应用于另一个向量。

[mydata{1},idx] = sort(mydata{1});
mydata{2} =  mydata{2}(idx);

答案 1 :(得分:2)

我认为您不能直接对单元格数组进行排序,因为每个单元格都被视为不同的“实体”。您始终可以对数字进行排序,使用索引对字符进行排序,然后将其放回单元格数组中:

nums = mydata{1};
chars = mydata{2};
[~, ind] = sort(nums);
sortednums = nums(ind);
sortedchars = chars(ind);
mydata{1} = sortednums;
mydata{2} = sortedchars;