我想根据以下内容替换矩阵M
中的一些1
值:
M 是一个矩阵,只包含值 0
、 1
和 2
:
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
;我只考虑存在值1
值2
在同一行上。
因此,对于给定的值1
,我检查同一列上是否有另一个值1
其行不包含任何2
。 如果是这样,我将第一个1
替换为 5
。 如果没有,我将1
替换为-5
例:
max(3)=1
M(1,3)=1, M(4,3)=1
和M(5,3)=1
.
在这里,对于第三列,我只考虑M(1,3)=1
和M(4,3)=1
.对于M(5,3)=1
,第5行没有2
。
与 M(4,3)=1 相同),我检查同一列上是否有另一个值1
,其行不包含任何2
! 在此 CAS 中,M(5,3)=1
满足M(1,3)=1
和M(4,3)=1
的这个条件。我用5
代替1
,我将拥有M(1,3)=5
和M(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