我有一个二进制矩阵,它看起来像这样:
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
的“行”。
答案 0 :(得分:2)
假设A
仅包含0
和1
值,
[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