让我们使用
accumarray和
bsxfun:
>如果可能的值始终为1,2,3,……形式:
ref = [3;3;3;4;4;2;1;3]; %// original values
obt = [4;2;3;1;1;3;4;3]; %// what the original values have been classified as
vals = 1:max([ref(:) obt(:)]); %// all possible values
result = accumarray([ref(:) obt(:)],1);
>如果值是任意的:
obt = [.1 .1 5.4 5.4 3 2.2 2.2]; %// original values
ref = [.1 2.2 2.2 5.4 5.4 3 3]; %// what the original values have been classified as
vals = unique([ref(:);obt(:)]); %// all existing values
[~, refv] = max(bsxfun(@eq, ref(:).', vals(:)));
[~, obtv] = max(bsxfun(@eq, obt(:).', vals(:)));
result = accumarray([refv(:) obtv(:)],1);
输入向量可以是行或列可互换.
val包含所有可能的值(在您的示例中为[1 2 3 4]). result(m,n)表示值vals(m)被分类为vals(m)的次数.