给定Matlab中的12 x 13矩阵,我需要在第9列中选择每两行最大值的行,并创建一个包含所选行的矩阵。下面的代码完成了这项工作,但我想知道如何改进和缩短这种语法。
A = rand(12,13);
a = A(1:2,:);
if a(1,9) > a(2,9)
a = A(1,:);
else
a = A(2,:);
end
b = A(3:4,:);
if b(1,9) > b(2,9)
b = A(3,:);
else
b = A(4,:);
end
c = A(5:6,:);
if c(1,9) > c(2,9)
c = A(5,:);
else
c = A(6,:);
end
d = A(7:8,:);
if d(1,9) > d(2,9)
d = A(7,:);
else
d = A(8,:);
end
e = A(9:10,:);
if e(1,9) > e(2,9)
e = A(9,:);
else
e = A(10,:);
end
f = A(11:12,:);
if f(1,9) > f(2,9)
f = A(11,:);
else
f = A(12,:);
end
SELECTED_A = [a;b;c;d;e;f];
谢谢。
答案 0 :(得分:3)
我可以提供一种更短的解决方案,但是如果你想要它完全矢量化,你将不得不等待一个更熟练的人。这是代码:
A=rand(12,13);
B=zeros(6,13); % preallocate solutionarray
for ii=2:2:12 % loop through every (second) row
[~,ind]=max([A(ii,9),A(ii-1,9)]); % check which element is greater
B(ii/2,:)=A(ii-(ind==2),:); % select corresponding row
end
这将为您提供一个数组B
,其中包含您要查找的值。
ind==2
,否则它将始终选择第9列中较小条目的行。或者您也可以离开它ind==1
并切换第4行中的元素,即max([A(ii-1,9),A(ii,9)])