MATLAB: How to make simpler this at ‘if condition’

matrix

There is 'a' vector [6×9].
And I want to define 'ahat' depends on 'ii' value.
For example, if ii=3, 'ahat' use a(1,1),a(2,1),a(3,1),a(4,1),a(5,1),a(6,1)] this value.
But could I make simpler this?
if (ii<5)
ahat=[a(1,1),a(2,1),a(3,1),a(4,1),a(5,1),a(6,1)];
elseif ((4<ii)&&(ii<9))
ahat=[a(1,2),a(2,2),a(3,2),a(4,2),a(5,2),a(6,2)];
elseif ((8<ii)&&(ii<13))
ahat=[a(1,3),a(2,3),a(3,3),a(4,3),a(5,3),a(6,3)];
elseif ((12<ii)&&(ii<17))
ahat=[a(1,4),a(2,4),a(3,4),a(4,4),a(5,4),a(6,4)];
elseif ((16<ii)&&(ii<21))
ahat=[a(1,5),a(2,5),a(3,5),a(4,5),a(5,5),a(6,5)];
elseif ((20<ii)&&(ii<25))
ahat=[a(1,6),a(2,6),a(3,6),a(4,6),a(5,6),a(6,6)];
elseif ((24<ii)&&(ii<29))
ahat=[a(1,7),a(2,7),a(3,7),a(4,7),a(5,7),a(6,7)];
elseif ((28<ii)&&(ii<33))
ahat=[a(1,8),a(2,8),a(3,8),a(4,8),a(5,8),a(6,8)];
else ((32<ii)&&(ii<37))
ahat=[a(1,9),a(2,9),a(3,9),a(4,9),a(5,9),a(6,9)];
end
a = ahat;

Best Answer

I am not certain this is more efficient than your code, however it takes advantage of the repeating patterns to make it simpler:
a = randi(9, 6, 9); % Create ‘a’
C1 = 4 : 4 : 32;
ahatfcn = @(k) [a(1,k),a(2,k),a(3,k),a(4,k),a(5,k),a(6,k)]; % Create Anonymous Function
for ii = 1 : 40 % Loop Over ‘ii’
if ii < 5
ahat = ahatfcn(1);
else
for k1 = 1:numel(C1)
if ((C1(k1)<ii) && (ii<(C1(k1)+5)))
ahat = ahatfcn(k1+1);
end
end
end
end
a = ahat
It runs without error. I defer to you to determine if it produces the result you want.