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

Matlab: replace value in a matrix with specific conditions

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

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 的列感兴趣,其 max1

对于具有 max = 1 的给定列,我连续考虑该列的一个值 1;我只考虑同一行上存在值 2 的值 1

因此,对于给定值 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!在这种情况下,M(5,3)=1 满足 M(1,3)=1M(4,3)=1 的条件。我将 1 替换为 5,我将得到 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