在MATLAB中逐行排列

时间:2013-04-16 15:00:03

标签: matlab

我正在试图找出一种面向矩阵的方法来在MATLAB中按行执行ismember函数。也就是说,如果我有矩阵

[1 2 3 4 5 6]
[7 8 9 10 11 12]

我放入

[3 4 5]
[10 11 12]

进入一些ismember-ish函数,我希望它返回

[0 0 1 1 1 0]
[0 0 0 1 1 1]

除了在for循环中循环遍历矩阵的每一行之外,有没有办法做到这一点?

2 个答案:

答案 0 :(得分:4)

假设您的数据以矩阵AB

的形式提供
A = [
    1 2 3 4 5 6
    7 8 9 10 11 12
    ];

B = [
    3 4 5
    10 11 12];

您可以将它们转换为单元格,然后使用cellfun

cellA = mat2cell(A, ones(1, size(A,1)), size(A,2));
cellB = mat2cell(B, ones(1, size(B,1)), size(B,2));

membership = cell2mat(cellfun(@ismember, cellA, cellB, 'UniformOutput',  false));

返回

membership =

     0     0     1     1     1     0
     0     0     0     1     1     1

答案 1 :(得分:0)

A = [5 3 4 2]; B = [2 4 4 4 6 8];
[Lia1,Locb1] = ismember(A,B)

Lia1 =

 1     1     1     1     0     0


 Locb1 =

 4     3     3     3     0     0