我有一个大小为1x10575的矩阵A
和另一个大小为13462x30974的矩阵B
。 A
的所有值都是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);
答案 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,因此在我发布的代码中也更改了它。)