【问题标题】:sort columns in MatlabMatlab中的列排序
【发布时间】:2011-12-23 20:06:16
【问题描述】:

我有 2 列使用 textscan 导入的数据。数据如下所示,其中 UundetectDdetect

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 的信息,但该函数用于对仅包含数字的矩阵进行排序。

有没有人可以用数字和字符混合排序数组的解决方案。

【问题讨论】:

    标签: matlab


    【解决方案1】:

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

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

    【讨论】:

    • 哦,那比我的好。 :) 您可以通过将cell2mat(mydata(:,1) 替换为mydata{1} 来使其更简单。
    • @3lectrologos:在我看到您的回答和评论之前发现我的错误并更正。我不知何故错过了问题中的现有数据结构。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2011-04-14
      • 2020-12-03
      • 1970-01-01
      • 2011-01-15
      • 2013-12-14
      • 1970-01-01
      相关资源
      最近更新 更多