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

时间:2015-01-06 18:29:01

标签: matlab matrix

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

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是每列的最大值。

我只对Mmax

的矩阵1的列感兴趣

对于max = 1的给定列,我会先连续考虑此列的一个值1;我只考虑同一行中存在值1的值2

因此,对于给定值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,其行不包含任何{ {1}}!在此cas中,2满足M(5,3)=1M(1,3)=1的此条件。我将M(4,3)=1替换为1,我将5M(1,3)=5

我在M(4,3)=5时对其他列执行相同操作。

最后,我想得到结果:

max(k)=1

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

 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