Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何通过引用矩阵中的坐标执行逻辑“与”运算_Matlab_Matrix_Logical Operators - Fatal编程技术网

Matlab 如何通过引用矩阵中的坐标执行逻辑“与”运算

Matlab 如何通过引用矩阵中的坐标执行逻辑“与”运算,matlab,matrix,logical-operators,Matlab,Matrix,Logical Operators,矩阵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

矩阵
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)

第二步: 在主
M
矩阵中扫描此坐标并执行和操作。如果答案为1,则将1放置在
A
矩阵的相应坐标中。例如,
M
矩阵中的
(1,1)(1,5)
(2,1)(2,5)=>1和0=>0进行AND运算。同样地,在
M
矩阵中
(3,1)(3,5)
(10,1)(10,5)
。如果出现任何位置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
的每一行
r
,你要提取
M
列,其中
A(r,:)==1
,然后将
1
放在
A(r,:)
的第一列
c
中,提取的
M
中的行
c
中的所有列都是1。使用更新的
A
在同一行上继续此过程,直到到达末尾,然后移动到下一行

下面是一个代码(假设
大小(a,1)=大小(M,2)
):


这就是你想要的吗?

我完全不清楚你想做什么。如何选择矩阵之间的比较?当一个矩阵比另一个大时会发生什么?实际上从矩阵中提取1的位置坐标。扫描M矩阵中的特定坐标,然后使用该坐标执行和操作。对于eg,在矩阵中取第一行,1的位置是1和5。现在,仅在M矩阵1和第5列中执行。即(1,1)(1,5)和(2,1)(2,5)。如果ans为1,则表示在第一行中取1,表示矩阵(1,2)(1,5)的位置。然后用(1,1)(1,5)和(3,1)(3,5)进行检查如果ans为0,则不进行标记。此矩阵大小无关紧要,因为此操作最多只会运行(大小(A))次,这在上述给定矩阵中是5次。M矩阵用于检查我们选择的特定列1’s与矩阵的空间。如果满足,则将1放置在特定行中,该行放置它满足M。是,你是对的,但有一个问题。它必须在每次处理后更新矩阵。例如,当在矩阵中取第四行时,1的位置在(4,4)中。它必须使用(1,4)进行处理。。(10,4)在M矩阵中。其中(9,4)满足条件。所以1被放置在矩阵的(4,9)中。更新后的A矩阵在第4行有两个1,即(4,4)(4,9)。现在这个过程已经满足了(4,4)(4,9)和(1,4)(1,9),…(10,4)(10,9)。现在所有这些地方都不符合条件。Soo,在new_A中没有第(4,10)位的1。因此,您想在行级别重复此操作,即在继续下一行之前,反复更新
A
中的同一行吗?或者你想检查一下所有矩阵,完成后再重新开始?最重要的是,这个过程应该在什么时候停止?这个过程应该通过逐行检查矩阵来结束,因为没有其他的可能性来拟合1。对于eg,在矩阵中将第4行更新为(4,4)(4,9)后,将使用M矩阵进行检查,是否有可能拟合1。如果不满足要求,则第4行的流程结束。同样,对于第5行,则停止。对于矩阵中的前3行,它不满足于第一次检查本身,因此过程逐行结束。在某些情况下,随着矩阵大小的增加,A可能会更新多次。在一般情况下,它必须检查是否有可能将1与更新的矩阵相匹配。如果不继续到下一行停止迭代。我想我完全失去了你。。。我已经对答案做了另一次编辑,这是我最后一次尝试,这次在行上循环,直到没有进一步的更改,尽管我不确定这是否有任何区别。我希望这能解决问题。
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
new_A = A;                          % copy the current state
for r = 1:size(new_A,1)
        Mc = M(:,new_A(r,:)==1).';  % extract the relevat columns in new_A
        c = 1;                      % column counter
        while c<=size(A,2)
            next_item = find(all(Mc(:,c:end),1),1)+c-1; % find the next item to change
            new_A(r,next_item) = 1;             % if all rows in Mc are 1, then place 1
            Mc = M(:,new_A(r,:)==1).';          % extract the relevat columns in new_A
            c = c+1;                            % go to the next column
        end
end
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