Matlab:用特定条件替换矩阵中的值



我想根据以下内容替换矩阵M中的一些1值:

M 是一个矩阵,只包含值 012

 M = [2  0  1  0  1  2  0  0  0  0
      1  0  0  2  0  0  0  1  0  0 
      0  1  0  0  2  0  2  1  0  0
      0  1  1  2  0  0  0  0  1  0
      0  0  1  0  0  0  0  0  1  1]
max=( 2  1  1  2  2  2  2  1  1  1 )

max 是每列的最大值。

我只对矩阵M的列感兴趣,其max 1

对于具有 max = 1 的给定列,我依次考虑该列的一个值1;我只考虑存在值12在同一行上。

因此,对于给定的值1,我检查同一列上是否有另一个值1其行不包含任何2。 如果是这样,我将第一个1替换为 5 。 如果没有,我将1替换为-5

例:

max(3)=1

M(1,3)=1, M(4,3)=1M(5,3)=1 .

在这里,对于第三列,我只考虑M(1,3)=1M(4,3)=1.对于M(5,3)=1,第5行没有2

因此,对于 M(1,3)=1(

与 M(4,3)=1 相同),我检查同一列上是否有另一个值1,其行不包含任何2! 在此 CAS 中,M(5,3)=1满足M(1,3)=1M(4,3)=1的这个条件。我用5代替1,我将拥有M(1,3)=5M(4,3)=5

max(k)=1时,我对其他列做同样的事情。

最后,我想得到结果:

     M = [2   0   5   0   1   2   0   0   0   0
          1   0   0   2   0   0   0  -5   0   0 
          0  -5   0   0   2   0   2  -5   0   0
          0  -5   5   2   0   0   0   0   5   0
          0   0   1   0   0   0   0   0   1   1]

试试这个:

maxM=max(M)        % never give a variable name of function (like just 'max')
MM=M(:,maxM==1);
maxM2=max(M,[],2);
rows2=MM(maxM2==2,:)*5;
rows1=MM(maxM2~=2,:);
rows2(:,~sum(rows1,1))=-rows2(:,~sum(rows1,1));
MM(maxM2==2,:)=rows2;
M(:,maxM==1)=MM;
 M = [2  0  1  0  1  2  0  0  0  0
      1  0  0  2  0  0  0  1  0  0 
      0  1  0  0  2  0  2  1  0  0
      0  1  1  2  0  0  0  0  1  0
      0  0  1  0  0  0  0  0  1  1];
  max_C = max(M,[],1);
  max_R = max(M,[],2);
  q = size(M,2);
  for i=1:q
      if max_C(i)==1
          One_index = find(ismember(M(:,i),1));
          p1 = size(One_index,1);
          x=0;
          for j=1:p1
              if max_R(One_index(j))==1
                  x=x+1;
              end
          end
          if x>0
              for j=1:p1
                  if max_R(One_index(j))==2
                      M(One_index(j),i)=5;
                  end
              end
          else
              for j=1:p1
                  if max_R(One_index(j))==2
                     M(One_index(j),i)=-5;
                  end
              end
          end
      end
  end

最新更新