从两个矩阵和特定条件中提取单元格

时间:2015-05-16 17:14:43

标签: matlab matrix

M = [1007  1007  4044  1007  4044  1007  5002;
      552   552   300   552   300   552   431;
     2010  2010  1113  2010  1113  2010  1100;
        7    12    25    15    12    30     2]  

N = [1007  4044  5002;
      552   300   431;
     2010  1113  1100;
      1.2     5  2.14;
      5.3   2.1  2.03]

N(1:3,:) = unique(M(1:3,:)','rows')'

如果M(4,:)

,我的目标是将N(1:3,i), i=1,2,3对应A的所有值放在单元格abs(N(4,i)-N(5,i))>0.2*N(5,i)的一个向量中

A是要构建的单元格

我的例子:

A = {[7 12 15 30],[25 12]}

[7 12 15 30]对应N(1:3,1)

[25 12]对应N(1:3,2)

第二个例子:

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];

N = [1007 4044 5002 622;
      552  300  431 124;
     2010 1113 1100  88;
       -1    2   -3   4;
      1.5  1.9  2.9 4.1];

A = {[7 12 15 30],[2 10 55]}

1 个答案:

答案 0 :(得分:2)

使用来自unique -

的第三个输出参数的类似内容
%// Find unique IDs for each column
[~,~,idx] = unique(M(1:3,:)','rows')          %//'

%// Accumulate elements from the fourth row of M based on the IDs
A = accumarray(idx(:),M(4,:).',[],@(x) {x})   %//'

%// Use mask corresponding to abs(N(4,i)-N(5,i))>0.2*N(5,i) and
%// filter out some of the cells from the output
A = A(abs(N(4,:)-N(5,:))>0.2*N(5,:))

对于给定的输入,我们得到 -

>> celldisp(A)
A{1} =
    12
    30
    15
     7
A{2} =
    12
    25

如果您正在寻找'Stable'输出,则可以使用accumarrayStable而不是here给我们 -

>> celldisp(A)
A{1} =
     7
    12
    15
    30
A{2} =
    25
    12