M = [1007 1007 4044 1007 4044 1007 5002 5002 5002 622 622;
552 552 300 552 300 552 431 431 431 124 124 ;
2010 2010 1113 2010 1113 2010 1100 1100 1100 88 88;
7 12 25 15 12 30 2 10 55 32 12]
X = {[2 5 68 44],[2 10 55 9 17],[1 55 6 7 8 9],[32 12]}
A = [1007 4044 5002 622
552 300 431 124
2010 1113 1100 88
7 25 2 32
12 12 10 12
15 55
30 ]
A
是解释我想要的内容的实体。
A
包含M(1:3,:)
的唯一列向量,以及M(4,:)
A(1:3,:) = unique(M(1:3,:)','rows')'
我希望找到A(1:3,:)
的列向量,其M(4,:)
中的对应值不属于单元格X
的一个向量的一部分(显然不等于其中一个这些载体)。
对于我的例子,期望的结果是矩阵:
[1007 4044;
552 300;
2010 1113;]
已删除列向量[5002;431;1100]
,因为[2;10;55]
中包含X{2} = [2 10 55 9 17]
已删除列向量[622;124;88]
,因为[32 12] = X{4}
答案 0 :(得分:1)
<强>输入强>
M = [1007 1007 4044 1007 4044 1007 5002 5002 5002 622 622;
552 552 300 552 300 552 431 431 431 124 124;
2010 2010 1113 2010 1113 2010 1100 1100 1100 88 88;
7 12 25 15 12 30 2 10 55 32 12];
X = {[2 5 68 44],[2 10 55 9 17],[1 55 6 7 8 9],[32 12]};
这样做(你做了什么)
A(1:3,:) = unique(M(1:3,:).','rows').';
给出:
>> A
A =
622 1007 4044 5002
124 552 300 431
88 2010 1113 1100
然后使用unique
和accumarray
[~, ~, subs] = unique(M(1:3,:)','rows');
A4 = accumarray(subs(:),M(4,:).',[],@(x) {x});
现在我们将A4
作为单元格数组
>> A4
A4 =
[2x1 double] [4x1 double] [2x1 double] [3x1 double]
然后使用cellfun
,ismember
,all
和any
%// getting a mask of which columns we want
idxC(length(A4)) = false;
for ii = 1:length(A4)
idxC(ii) = ~any(cellfun(@(x) all(ismember(A4{ii},x)), X));
end
显示我们想要的列
out = A(:,idxC)
<强>结果:强>
>> out
out =
1007 4044
552 300
2010 1113
我建议你亲自试试@Dan建议。如果你被困在某个地方,你可以参考这个。如果您有任何澄清/修改,请告诉我:))