MATLAB:计算Col A中的值出现次数,条件为Matrix的Col B.

时间:2014-10-13 00:52:03

标签: matlab matrix

我环顾四周,找到了近距离的解决方案,但很难将它们提炼到我想要的地方。

给定矩阵 A

A = [12 1 0 ...; 
     22 1 0 ...;
      1 2 1 ...;
     12 1 2 ...;
      2 3 2 ...;
     21 1 1 ...;]

我需要在A(:,1)A(:,2)==1时收集A(:,3)=={0,1,2,...}中的所有元素。

换句话说,我对A的解决方案如下:

12  1 12
22 21  2

到目前为止我的代码是:

B = A( A(:,2) == 1 & A(:,3) == 0, 1 )
C = A( A(:,2) == 1 & A(:,3) == 1, 1 )
D = A( A(:,2) == 1 & A(:,3) == 2, 1 )

有没有办法在不创建的情况下将 B C D 连接在一起首先是3个矩阵,这样(应用伪代码):  B( 0,(1:3) ) = A( A(:,2) == 1 & A(:,3) == (0:3), 1 )

由于

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您可以使用ismember,如下所示:

filter = A(:,2)==1 & ismember(A(:,3),0:3);
B = A(filter,1);

您不需要单独的filter变量来执行此操作,我只是为了清晰起见而倾向于这样做。

答案 1 :(得分:0)

您可以使用accumarray作为第四个参数{/ 3}}:

ind = A(:,2)==1;
result = accumarray(1+A(ind,3), A(ind,1), [], @(x) {x});

这会生成一个单元格数组,每个单元格中都有一个值向量。在您的示例中,

result{1} =
    22
    12

result{2} =
    21

result{3} =
    12