【问题标题】:Matlab Array SortingMatlab 数组排序
【发布时间】:2017-04-11 17:29:45
【问题描述】:

我有一个这样的数组(来自 excel 文件);

原始 =

':Gamer Name'    'mail'                    'true'    'false'    'Date'               
'Haydar'         [                   1]    [2]    [3]    [                   5]
'Çınar'         [                   3]    [4]    [1]    [                   6]
'Ali'            [                   2]    [5]    [2]    [                   3]
' Oyuncu'        [                 NaN]    [0]    [3]    [                 NaN]
' Oyuncu'        [                 NaN]    [0]    [3]    [                 NaN]
' Oyuncu'        [                 NaN]    [0]    [3]    '11-Apr-2017 19:17:10'
' Haydar'        'haydarc'                 [0]    [3]    '11-Apr-2017 19:22:14'
[        NaN]    [                 NaN]    [0]    [3]    '11-Apr-2017 19:24:40'
[        NaN]    [                 NaN]    [3]    [0]    '11-Apr-2017 19:27:45'
' Haydar'        'haydarcinar@yandex…'    [3]    [0]    '11-Apr-2017 20:02:04'

我想按“真”排序。我怎样才能做到这一点 ? 谢谢

【问题讨论】:

    标签: arrays matlab sorting


    【解决方案1】:

    您可以根据元胞数组的第三列(即true)提取通过sort 排序的索引,然后根据此重新排列元胞数组的行。使用sort 的第二个输出来帮助您执行此操作。

    但是,您的第一行包含字符。您需要做的是拉出第一行,对数字进行排序,然后重建排序后的元胞数组,将第一行放回原处:

    raws = raw(2:end, :);
    [~,ind] = sort(cell2mat(raws(:, 3));
    raw_sorted = [raw(1,:); raws(ind, :));
    

    函数cell2mat 有助于将true 列中的单元格列转换为矩阵,以便我们可以成功使用sort。一旦我们找到排序索引,只需在没有第一行的单元格数组中进行索引,但请确保将第一行放回原处。

    【讨论】:

    • 谢谢先生。我现在已经尝试排序 1 小时。但我做不到。我很感谢你:)
    • @haydarçınar 完全没问题 :) 祝你好运!
    • 您也可以将这些数据打包到表格中而不是单元格数组中,然后调用sortrows
    • @CKT 好主意,但我想尽可能笼统。 table 直到 R2013b 才引入。
    猜你喜欢
    • 1970-01-01
    • 2013-09-20
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多