我有两个矩阵。一个是PR1
单位矩阵和另一个反向单位矩阵PR2
。提到的参考矩阵A可以是5x5 10x10等。根据I1,I2被创建。这里提到5x5矩阵。
逻辑运算以And = PR1 AND PR2开头,后跟Xor = PR1 XOR PR2。
A
矩阵:
A =
0 1 1 1 0
1 0 1 1 0
1 1 0 1 1
1 1 1 0 1
0 0 1 1 0
I
是单位矩阵
PR1 =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
PR2 =
0 0 0 0 1
0 0 0 1 0
0 0 1 0 0
0 1 0 0 0
1 0 0 0 0
和=
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
Xor =
1 0 0 0 1
0 1 0 1 0
0 0 0 0 0
0 1 0 1 0
1 0 0 0 1
现在扫描And和Xor矩阵中每行的左到右。将第一个1放在R1矩阵中的新行中。跟踪第二个并在上面的矩阵(1,5)中的A矩阵中的第一个1行和第二个1行之间进行NOR操作是第二个1位,所以在第1和第5行之间进行NOR操作将答案放在R1matrix中。同样,它有R1。
R1 =
1 0 0 0 1
0 0 0 0 0
0 0 1 0 0
0 1 0 0 0
1 0 0 0 1
现在将R1替换为PR2 新 PR2 =
1 0 0 0 1
0 0 0 0 0
0 0 1 0 0
0 1 0 0 0
1 0 0 0 1
再次重复相同的过程PR1和PR2,然后是PR1 XOR PR2
和=
1 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 1
Xor =
0 0 0 0 1
0 1 0 0 0
0 0 0 0 0
0 1 0 1 0
1 0 0 0 0
现在扫描And和Xor矩阵中每行的左到右。将第一个1放在R1矩阵中的新行中。跟踪第二个并在上面的矩阵(1,5)中的A矩阵中的第一个1行和第二个1行之间进行NOR操作是第二个1位所以在第1和第5行之间进行NOR操作将答案放在R2matrix中。
R2 =
1 0 0 0 1
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
1 0 0 0 1
检查所有列是否至少有1并停止
答案 0 :(得分:2)
PR1和PR2与:PR1 * PR2
相同C = xor(A,B)
(source)。
找到单位矩阵有一个内置函数。 Identity矩阵(我相信就是这样,我不知道为什么叫它"眼睛")
你应该真的谷歌的东西,如:" xor matlab矩阵"。获得这些内容确实没有多少想法。你可能会更加努力地写下你的问题。
答案 1 :(得分:1)
这很直接
PR1 = eye(size(A,1));
PR2 = flip(PR1);
AND = and(PR1,PR2);
XOR = xor(PR1,PR2);
k = find(And~=0,1,'first');
R1 = zeros(size(A,1));
R1(k) = And(k);
idx = find(Xor~=0, 1, 'first');
R1(idx) = Xor(idx);
如果你想对第1行和第5行进行NOR操作,那么你可以
R1(1,:) = !(or(A(1,:),A(5,:)))
R1(2,:) = !(or(A(2,:),A(4,:)))
R1(4,:) = !(or(A(2,:),A(4,:)))
R1(5,:) = !(or(A(1,:),A(5,:)))
PR2 = R1
从此处根据需要重复您的流程。