我想根据以下内容替换矩阵1
中的M
的某些值:
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(1,3)= 1(M(4,3)= 1相同),我检查同一列上是否有另一个值1
,其行不包含任何{ {1}}!在此cas中,2
满足M(5,3)=1
和M(1,3)=1
的此条件。我将M(4,3)=1
替换为1
,我将5
和M(1,3)=5
我在M(4,3)=5
时对其他列执行相同操作。
最后,我想得到结果:
max(k)=1
答案 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