【发布时间】:2016-07-27 17:10:19
【问题描述】:
矩阵A在不同坐标中包含1:
A =
1 0 0 0 1 0 0 0 0 0
0 1 0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 0 0 1
0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
第 1 步: 查找 1 的坐标。例如,第一行是 (1,1) 和 (1,5)。
c1 = find(A==1)
第 2 步:
在 Main M 矩阵中扫描此坐标并执行 AND 操作。如果答案是 1,则将 1 放在 A 矩阵的相应坐标中。例如,M 矩阵中的(1,1) (1,5) 与(2,1)(2,5)==> 1 1 ANDed 0 0 ==>0 0 进行与运算。同样(3,1) (3,5) 到(10,1) (10,5) 在M 矩阵中。如果有任何地方 1,则将 1 放置在 A 矩阵中的相应坐标位置。
M =
1 0 0 0 1 1 1 1 1 1
0 1 0 0 0 1 1 1 1 1
0 0 1 0 1 1 1 1 1 1
0 0 0 1 0 0 0 0 1 1
1 0 1 0 1 0 0 0 0 0
1 1 1 0 0 1 0 0 1 1
1 1 1 0 0 0 1 0 1 1
1 1 1 0 0 0 0 1 0 0
1 1 1 1 0 1 1 0 1 0
1 1 1 1 0 1 1 0 0 1
在第 4 行的给定矩阵中A 矩阵有 1 in (4,4) 检查M 矩阵中的剩余坐标。它与 (1,4) 与 (2,4) 进行与运算,而 (9,4) 则为 1。将 1 放在A 矩阵 (4,9) 中。我已经尝试过使用代码,但它不适用于一般情况。
a = 1:size(M)
R1 = 1;
for j = 1:size(A)
A1 = A(j,:)
c = find(A1==1) % finding 1's place
l = length(c)
a1 = a(a~=j)
for k = a1(1):a1(end)
R1 = 1;
for i = 1:l1
temp1 = R1
R1 = and(M(j,c(i)),M(k,c(i))) % performing AND operations
R2 = and(R1,temp1)
end
if (R2==1) % if the condition is satisfied by 1
A(j,k)=1 % place the 1 in the particular coordinate in A matrix
end
end
end
New_A = A
New_A =
1 0 0 0 1 0 0 0 0 0
0 1 0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 0 0 1
0 0 0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1 0 0
【问题讨论】:
-
我完全不清楚你想做什么。您如何选择要在矩阵之间进行比较的内容?当其中一个矩阵比另一个大时会发生什么?
-
实际上是从A矩阵中拾取1的位置坐标。扫描 M 矩阵中的特定坐标,然后对其执行 AND 操作。例如,在 A 矩阵中取第一行,1 的位置是 1 和 5。现在 AND 仅在 M 矩阵 1 和第 5 列中执行。即 (1,1)(1,5)AND(2,1)(2 ,5) 如果 ans 为 1 1 表示将 1 放置在第一行 A 矩阵 (1,2) (1,5) 位置 A 矩阵。然后用 (1,1)(1,5)AND(3, 1)(3,5) 如果 ans 为 0,则保持不变。
-
此矩阵大小无关紧要,因为此操作将运行最多 (size(A)) 次,仅是上述矩阵中的 5 次。M 矩阵用于检查特定列我们用 A 矩阵选择了 1 的位置。如果满意,将 1 放在特定的行中,它对 M 感到满意。
标签: matlab matrix logical-operators