我有 2 个元胞数组,如下所示:
A = {'S' 'M' 'N' 'E'};
B = {'E' 'M' 'Q' 'S'};
在本例中,不同元素的数量为 3。
在数字数组中,我可以使用 length(find(A ~= B));
轻松地一步计算不同元素的数量。
字符元胞数组有类似的东西吗?
最佳答案
编辑:我想我误解了你的问题,你可能意味着在数组中的相应位置找到不同的元素。我仍然保留我的旧答案
计算同一位置的不同元素
yuk 使用 strcmp
的方法是正确的。但是,仅当两个数组大小相同时它才有效。通用的解决方案是:
N = min(numel(A), numel(B));
sum(~strcmp(A(1:N), B(1:N))) + numel(A) + numel(B) - 2 * N
如果数组的长度不同,则较大数组中的“额外”元素将被视为不同的元素。
计算任意位置的不同元素
最通用的方法是使用 ismember
,它不关心字符串的长度或其在数组中的位置。要计算 A
和 B
中不同元素的总数,只需执行以下操作:
sum(ismember(A, B)) + sum(ismember(B, A))
使用 setdiff
也可以获得相同的效果(而不是ismember
):
numel(setdiff(A, B)) + numel(setdiff(B, A))
这两种方式对于任意两个数组都有效,但不一定大小相等。
关于matlab元胞数组,计算不同元素的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15296497/