Consider a simple Matlab/Octave exercise.
I have an N by 2 vector x. Thus, x(i,1) and x(i,2) are the entries of the i-th row. Say I want to rearrange x so that the first entry in any row is larger than the second. That is, I want to switch the entries of a row, only if a certain condition is met.
It is easy to write this in a element-by-element fashion
for i = 1:N
if x(i,2) > x(i,1)
c = x(i,1);
x(i,1) = x(i,2);
x(i,2) = c;
endif
endfor
But we all know that element-by-element operations in Matlab or Octave suck! Here is another vectorized method:
SwitchCond = x(:,2) < x(:,1);
x(SwitchCond,[1,2]) = x(SwitchCond,[2,1]);
Besides being faster, it is also more succinct.
I have an N by 2 vector x. Thus, x(i,1) and x(i,2) are the entries of the i-th row. Say I want to rearrange x so that the first entry in any row is larger than the second. That is, I want to switch the entries of a row, only if a certain condition is met.
It is easy to write this in a element-by-element fashion
for i = 1:N
if x(i,2) > x(i,1)
c = x(i,1);
x(i,1) = x(i,2);
x(i,2) = c;
endif
endfor
But we all know that element-by-element operations in Matlab or Octave suck! Here is another vectorized method:
SwitchCond = x(:,2) < x(:,1);
x(SwitchCond,[1,2]) = x(SwitchCond,[2,1]);
Besides being faster, it is also more succinct.
No comments:
Post a Comment