如何在矩阵中识别相同的数字?

时间:2015-05-17 01:47:59

标签: matlab matrix

我有一个二进制矩阵,它看起来像这样:

A = [ 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0;
      1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0;
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1; ]

但是当我尝试将A放入计算中时,我只能使用向量B, 矩阵A的行和为计算。 B看起来像这样:

B=[ 1 1 0 1 1 1 0 1 1 0 1 1 0 0 1 1 1];

但是我仍然想要提供哪些“1”来自矩阵A的哪一行的信息。我想知道有没有办法为向量B添加其他条件,因此向量B仍然可以携带来自矩阵A的信息,即“1”来自哪个矩阵A的“行”。

2 个答案:

答案 0 :(得分:2)

假设A仅包含01值,

[v, B] = max(A,[],1);
B(v==0) = 0;

给出

B =
 2    2    0    1    1    1    0    2    2    0    1    1    0    0    2    3    3

如果列中有多个1值,则会给出第一个的行索引。

答案 1 :(得分:0)

@ luis的想法......我只是添加了一些变化。此外,我仍然不知道这是否是OP想要的。

从luis的解决方案中创建一个3D矩阵,以便二进制值和行信息都存储在B中。如果需要二进制值,请访问切片1.如果需要行信息,请访问切片2

[B(:,:,1), B(:,:,2)] = max(A);
B(1,~all(B,3),:) = 0;

>> B

B(:,:,1) =

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


B(:,:,2) =

 2   2   0   1   1   1   0   2   2   0   1   1   0   0   2   3   3

如果你想要一个特定的二进制值及其行索引,比如说第8个二进制值及其对应的行索引,

>> B(:,8,:)

ans(:,:,1) =

 1


ans(:,:,2) =

 2