在MATLAB中使用ismember条件组合两个矩阵

时间:2017-11-09 15:16:45

标签: arrays matlab matrix

我有一个大小为1x10575的矩阵A和另一个大小为13462x30974的矩阵BA的所有值都是B的成员。我想获得一个大小为13462x10575的新矩阵C,条件如下。

如果B的值是A的成员,则返回B各栏中的所有值。如果A不是B的成员,则不再尊重此列。

这将是矩阵如何看起来的一个例子:

A = [1 2 3 4 5 6; 11 12 13 14 15 16; 21 22 23 24 25 26];
B = [1 2 5 6];

输出应如下所示:

C = [1 2 5 6; 11 12 14 15; 21 22 24 25];

我尝试了以下代码,但它以错误的格式(1x417281728)返回输出C

[isMatch, index] = ismember(B(1, :), A);
C = nan(size(B, 1), numel(A));
C(:, index(isMatch)) = B(:, isMatch);

1 个答案:

答案 0 :(得分:2)

您基本上想要做的是:"对于数组A中的每个元素,检查B中是否存在此元素,然后返回整个列。"因此,您对ismember的猜测是完全正确的,因为您要检查A是否是B的成员。对于您的示例,结果将是:

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

所以,你必须将所有这些索引折叠成一个数组,它表示至少有一个成员的二进制数为1.这可以使用any命令,它基本上检查了在所考虑的维度中存在至少一个TRUE。所以最终你最终会得到:

C = A(:,any(ismember(A,B),1))

[请注意,在您的示例中,您更改了A和B,因此在我发布的代码中也更改了它。)