MATLAB: Avoid loops with matrices.

for loopvectorization

Could anyone help me with avoiding loops at these situations (if it is possible):
a = [1 2 3 4 5 4 3 2 1 2 3 4 5];
b = [2 3 4 5 4 3 2 1 2 3 4 5 4];
q = 1:13;
c = cell(5,5);
for i = 1:numel(a)
c{a(i), b(i)} = [c{a(i), b(i)}, q(i)];
end
also
for i = 1:numel(a)
c{a(i), b(i)} = unique(c{a(i), b(i)})'
end
For me it is necessary to save every sec! Tnx!

Best Answer

You can use accumarray to get the same output, although the for loop is still about twice as fast as accumarray (for that data). Which method is fastest may depend on the data size.
>> accumarray([a',b'], q, [5,5], @(x){x})
ans =
[] [2x1 double] [] [] []
[8] [] [2x1 double] [] []
[] [ 7] [] [2x1 double] []
[] [] [ 6] [] [2x1 double]
[] [] [] [2x1 double] []