我有2个单元格数组如下:
A = {'S' 'M' 'N' 'E'};
B = {'E' 'M' 'Q' 'S'};
在这种情况下,不同元素的数量为3。
在数字数组中,我可以使用length(find(A ~= B));
轻松地在一个步骤中轻松计算不同元素的数量。
字符单元格数组是否有相似之处?
答案 0 :(得分:2)
尝试
cell2mat(A)==cell2mat(B)
首先,其余的应该是直截了当的。如果单元阵列没有相同的尺寸,这种简单的方法将失败。
答案 1 :(得分:2)
如果您的单元格数组是字符串的单元格数组,则可以使用STRCMP:
sum(~strcmp(A,B))
当然要确保A
和B
具有相同的长度。
顺便说一下数字数组,使用sum(A~=B)
会更有效率。一般来说find
很慢。
答案 2 :(得分:1)
编辑:我想我误解了你的问题,你可能意味着在数组中的相应位置找到不同的元素。我仍然保留旧答案
yuk使用strcmp
的方法是正确的。但是,仅当两个阵列的大小相同时才有效。广义的解决方案是:
N = min(numel(A), numel(B));
sum(~strcmp(A(1:N), B(1:N))) + numel(A) + numel(B) - 2 * N
如果数组的长度不同,则较大数组中的“extra”元素将在此处计为不同。
最常用的方法是使用ismember
,它不关心字符串的长度或它们在数组中的位置。要计算A
和B
中不同的元素总数,请执行以下操作:
sum(ismember(A, B)) + sum(ismember(B, A))
使用setdiff
(而不是ismember
)也可以获得相同的效果:
numel(setdiff(A, B)) + numel(setdiff(B, A))
两种方式对任何两个数组都有效,不一定大小相同。
答案 3 :(得分:0)
独特(重塑(cell2mat(A,1,[])),重塑(cell2mat(B,1,[])))