【问题标题】:Place equal elements in cell array在元胞数组中放置相等的元素
【发布时间】:2014-03-15 16:00:31
【问题描述】:

我有一个数组。我对其进行了排序,因此我对数组和初始数组中已排序元素的索引进行了排序。

例如,从[4 5 4 4 4 4 5 4] 我得到[4 4 4 4 4 4 5 5][1 3 4 5 6 8 2 7]

如何将接收到的索引放入单元格数组中,以便在一个单元格中包含相等元素的索引?在我的示例中,它将是:{1 3 4 5 6 8}{2 7}

我正在寻找非循环的方法来解决它。

【问题讨论】:

    标签: arrays matlab sorting cell-array


    【解决方案1】:

    使用accumarray:

    x = [4 5 4 4 4 4 5 4]; %// data
    
    [~, ~, jj] = unique(x);
    result = accumarray(jj(:), 1:numel(x), [], @(v) {v(:).'});
    

    或者,如果您需要对每组索引进行排序:

    result = accumarray(jj(:), 1:numel(x), [], @(v) {sort(v(:)).'});
    

    【讨论】:

    • 有一个问题 - accumarray 里面没有循环吗?
    • @Divakar 好问题。我不知道。如果确实如此,我不会感到惊讶(就像arrayfun 等是伪装的循环一样)。但它非常有用,我不介意:-)
    • 我认为它有循环,但是这些函数是很好的“包装器”来隐藏循环。此外,在这种特殊情况下,我认为矢量化没有任何机会。我认为使用 cellarrays 会带来这些限制。 +1 顺便说一句
    • @Divakar 谢谢。是的,元胞数组在矢量化方面表现不佳
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    相关资源
    最近更新 更多