【问题标题】:Unique Rows for a cell array元胞数组的唯一行
【发布时间】:2014-08-10 17:34:59
【问题描述】:

我想知道如何在仅考虑单元格数组的第二列和第六列时找到它的唯一行。

我已经尝试过了:a = unique(strcat(a(:,2), a(:, 6)),'rows'),其中a 是元胞数组,但它给出了错误 - index exceeds matrix dimensions)

我尝试使用函数uniquestrcat,因为它们适用于包含字符串和数字的单元格类型变量。

【问题讨论】:

  • 我已经试过了:a = unique(strcat(a(:,2), a(:, 6)),'rows'); 但它给出了一个错误(索引超出矩阵尺寸)
  • a 是什么?请通过编辑您的问题提供一个(小)可重复的示例
  • @user3557054 做了一些修改,如果现在更有意义,请检查一下。
  • @user3557054 同样正如丹尼斯的解决方案中提到的,既然你提到了 - index exceeds matrix dimensions),你需要看看你是否在第 2 列和第 6 列有一致的数据。

标签: matlab unique cell cell-array strcat


【解决方案1】:

假设a 是元胞数组,并且您正在寻找基于列26 元胞的唯一行。同样,可以建议一种基于少数 unique 用法的方法,如下所示 -

[~,~,ind1] = unique(cellfun(@num2str,a(:,2),'uni',0)) %//unique indices for col 2
[~,~,ind2] = unique(cellfun(@num2str,a(:,6),'uni',0)) %//unique indices for col 6
[~,ind]= unique([ind1 ind2],'rows','stable')%//unique row indices based on col2,6
a = a(ind,:)

另一种刮胡子的方法unique -

col26 = cellfun(@num2str,[a(:,2) a(:,6)],'uni',0)
[~,~,unqind26] = unique(col26(:))
col26indexed = reshape(unqind26,size(col26))
[~,ind] = unique(col26indexed,'rows','stable')
a = a(ind,:)

注意将num2str 用作单元格数组的unique 仅适用于字符串单元格,因此必须将它们转换为strings

这两种方法都适用于 cell arraynumeralsstringsmix of them(假设 [0]'0' 相同),但如果您想要“唯一性”也基于它们的数据类型,因此必须在此处添加更多代码,并且由于问题中未提及该特定情况,因此此处不考虑。

另外,根据我阅读问题文本的理解,我认为您不需要在这里使用strcat

【讨论】:

  • 我同意strcat 似乎没有必要,但似乎解决方案不起作用或解释了错误。试试这个单元格数组:a = cell(6); a(:)={0}; a(1,2)={1}
  • @DennisJaheruddin 谢谢!这是一个很好的错误发现,因为我错过了使用 cell array of numerals 进行的测试,现在已修复!
【解决方案2】:

我在这里只看到三种可能的方式来生成你得到的错误。

  1. 变量a 太小或调用不正确。通过单独运行 a(:,6) 进行测试。
  2. 不小心创建了一个名为strcat 的变量
  3. 不小心创建了一个名为unique 的变量

我不确定 2 和 3 是否真的会导致您得到的错误,但数字 1 最有可能是可疑的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 2011-01-24
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多