我想知道如果只考虑它的第二和第六列,怎么能找到一个单元格数组的唯一行。
我已经尝试了这个:a = unique(strcat(a(:,2), a(:, 6)),'rows')
,其中a
是单元格数组,但它会出错 - index exceeds matrix dimensions)
。
我尝试使用函数unique
和strcat
,因为它们适用于包含字符串和数字的单元格类型变量。
答案 0 :(得分:2)
假设a
是单元格数组,并且您希望根据列2
和6
单元格找到其中的唯一行。同样,可以建议一种基于少量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
numerals
或strings
或mix of them
(假设为[0]
和'0'
但是如果你想根据他们的数据类型获得“唯一性”,那么必须在那里添加更多代码,因为问题中没有提到特定情况,所以不在此考虑。
此外,我认为您不必在此处使用strcat
来理解阅读问题的文字。
答案 1 :(得分:1)
我只看到三种可能的方法来生成你得到的错误。
a
太小或调用不正确。通过单独运行a(:,6)
进行测试。strcat
unique
我不确定2和3是否真的可以导致你得到的错误,但是数字1是最可能的嫌疑人。