我试图找出一种面向矩阵的方法来在 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 循环中遍历矩阵的每一行之外,有没有办法做到这一点?
我试图找出一种面向矩阵的方法来在 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 循环中遍历矩阵的每一行之外,有没有办法做到这一点?
假设您的数据以矩阵形式提供,A
并且B
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
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