单元阵列的唯一行

时间:2014-08-10 17:35:00

标签: matlab unique cell cell-array strcat

我想知道如果只考虑它的第二和第六列,怎么能找到一个单元格数组的唯一行。

我已经尝试了这个:a = unique(strcat(a(:,2), a(:, 6)),'rows'),其中a是单元格数组,但它会出错 - index exceeds matrix dimensions)

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

2 个答案:

答案 0 :(得分:2)

假设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 array numeralsstringsmix of them(假设为[0]'0'但是如果你想根据他们的数据类型获得“唯一性”,那么必须在那里添加更多代码,因为问题中没有提到特定情况,所以不在此考虑。

此外,我认为您不必在此处使用strcat来理解阅读问题的文字。

答案 1 :(得分:1)

我只看到三种可能的方法来生成你得到的错误。

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

    我不确定2和3是否真的可以导致你得到的错误,但是数字1是最可能的嫌疑人。