matlab单元格数组,计数不同元素的数量

时间:2013-03-08 14:39:38

标签: matlab cell-array

我有2个单元格数组如下:

A = {'S' 'M' 'N' 'E'};
B = {'E' 'M' 'Q' 'S'};

在这种情况下,不同元素的数量为3。

在数字数组中,我可以使用length(find(A ~= B));轻松地在一个步骤中轻松计算不同元素的数量。

字符单元格数组是否有相似之处?

4 个答案:

答案 0 :(得分:2)

尝试

cell2mat(A)==cell2mat(B)

首先,其余的应该是直截了当的。如果单元阵列没有相同的尺寸,这种简单的方法将失败。

答案 1 :(得分:2)

如果您的单元格数组是字符串的单元格数组,则可以使用STRCMP:

sum(~strcmp(A,B))

当然要确保AB具有相同的长度。


顺便说一下数字数组,使用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,它不关心字符串的长度或它们在数组中的位置。要计算AB中不同的元素总数,请执行以下操作:

sum(ismember(A, B)) + sum(ismember(B, A))

使用setdiff(而不是ismember)也可以获得相同的效果:

numel(setdiff(A, B)) + numel(setdiff(B, A))

两种方式对任何两个数组都有效,不一定大小相同。

答案 3 :(得分:0)

如果在你给出的例子中给出A和B,你也可以尝试唯一([A B])。 A和B没有相同的尺寸,你可以尝试这个。

独特(重塑(cell2mat(A,1,[])),重塑(cell2mat(B,1,[])))