Matlab 使用或位运算将m x n矩阵的第一列与后面的每一列进行比较

Matlab 使用或位运算将m x n矩阵的第一列与后面的每一列进行比较,matlab,matrix,Matlab,Matrix,我让矩阵m x n随机填充1和0,除了最后一行,它是从1到n个列顺序填充的。我希望使用OR或位运算将第一列与下面的每一列进行比较。如果比较两列的结果是向量填充了所有的列,我想返回这两个矩阵最后元素的向量。事实并非如此 如果有多个列可与第一列进行比较,则当 找到第一个匹配项。相反,我想返回第一列的最后一个元素。我怎样才能做到这一点 例1: 1 0 0 1 0 0 1 1 0 1

我让矩阵m x n随机填充1和0,除了最后一行,它是从1到n个列顺序填充的。我希望使用OR或位运算将第一列与下面的每一列进行比较。如果比较两列的结果是向量填充了所有的列,我想返回这两个矩阵最后元素的向量。事实并非如此 如果有多个列可与第一列进行比较,则当 找到第一个匹配项。相反,我想返回第一列的最后一个元素。我怎样才能做到这一点

例1:

      1     0     0     1     0     0     1              
      1     0     1     1     0     0     1             
C =   1     1     1     1     0     0     1             
      0     1     1     1     0     1     1              
      2     3     5     6     7     9     11 
在第一个示例中,第一列和第二列的按位OR给出了包含所有列的向量,因此我们可以返回 向量[2,3]

例2:

      0     0     0     0     0     0     0              
      1     0     1     1     0     0     1             
C =   1     1     1     1     0     0     1             
      0     0     1     1     0     1     1              
      2     3     5     6     7     9     11 

在第二个示例中,第一列没有可以返回向量的对,所有的对都使用OR运算,因此我们应该只返回第一列的最后一个元素,即[2]

仍然不确定大约1点,但此代码应该可以工作。如果您想在找到一个解决方案后停止,请在第一种情况下取消对break命令的注释

C= round(rand(5,10)*1); %Data
mySizes = size(C);      %Size of Data
D= 1:mySizes(2);        %values for last row
C = [C; D];             %adding last row to data
A = C(:,1);             %first column
result_found =0;        %control variable if a solution was found
for k=1:mySizes(2)-1    %loop
    B= C(:,k+1);        %k-th column
    if A(1:end-1,1) | B(1:end-1,1)  %comparing the k-th column with the first
        result= [A(end,1),B(end,1)]  %result
        result_found = 1;            %result has been found
         %break
    end    
end
if result_found ~=1
   result = A(end,1)                 %if no result has been found return last val of column 1
end
例如:

说明:


bsxfun@or, ... 计算第一列和其他每列之间的or运算。对于每个列,如果结果均为true,则all将返回一个true值。然后1+find…,1找到第一个这样的true的列索引。由此,通过索引到C中生成最终结果。

C与本例有何关系?当它们不是该矩阵中的所有值时,您希望得到什么回报?结果是您期望的结果还是您在其他地方使用的赋值,也就是说,与这个问题无关?我正在从C中提取矩阵A和B…我想使用或查看或逻辑表第一列与所有其他列进行比较,如果结果是矩阵与所有列,我想返回向量,只填充成功比较的最后元素matrices@user3119422如果没有找到包含所有1的矩阵,那么?仆从,为什么你的结果是1 3,而第一列可以被“或”得到所有1的结果,所以结果向量应该是第一列1的最后一个元素,因为不匹配found@user3119422但是我的第一个专栏你想和它比较对吗?是1 0 0 1 x,我的第三列是1 0 0 1 y,因此你想要的结果是x,y。您说过您不想比较列的最后一行,但是如果其他元素匹配,您希望这些元素作为结果。很明显,第一列总是等于第一列。如果你想检查整个程序是否有意义,你应该只写Cend,1来返回最后一行第一列的值。因此,1 0 0 1 x | 1 0 0 1 y的结果给出1 0 0 1,它不是我所需要的所有1的矩阵。例如,比较第6列和第10列1 0 1 0 1 | 0 1 0 1 0=1 1 1 1,因为你得到了所有的1返回最后的元素[6,10]@user3119422好吧,我误解了你的问题。我编辑了我的解决方案,使其能够工作。只有if案件的论点需要调整。由于新的编译和rand-function,示例发生了更改。作为仆从,我检查了解决方案是否有效!谢谢…我也修复了我的问题,所以我希望它不再是负面的。哇,路易斯·门多,只有一句话,它就行了!我只在一个矩阵上测试了它,因为我仍然没有找到解决方案,如何生成随机填充0和1的矩阵,最后一行应该从1到n依次填充…有什么想法吗?@user3119422 4行7列的示例:C=[randi2,4,7-1;1:7]。看见或者等效地使用:C=[rand4,7@LuisMendo我有着完全相同的想法和工具。我想像bsxfun、all/any、min/max、find这样的工具对于矩阵相关的问题是非常有用的,除非我们讨论的是内置的工具,否则不需要超出这些工具。你已经有了我的+1来解决思想上的相似性:
C= 0    0   1   1   1   0   0   0   0   0
   1    1   0   1   0   0   1   1   0   1
   1    0   1   0   1   0   1   1   1   0
   0    1   1   0   0   1   1   0   1   0
   0    0   1   0   1   0   1   1   1   0
   1    2   3   4   5   6   7   8   9   10

result =

     1     3
result = C(end,[1 1+find(all(bsxfun(@or, C(1:end-1,1),C(1:end-1,2:end) )), 1)]);