# Changes

,  01:15, 27 November 2011
+ more tips
Line 105: Line 105:
inds = isnan(A);

inds = isnan(A);

B(!inds) = num2cell(A(!inds))

B(!inds) = num2cell(A(!inds))
B = reshape(B,

This gets you a 1 column cell array. You can reshape it to the original size by using the <code>reshape</function>

This gets you a 1 column cell array. You can reshape it to the original size by using the <code>reshape</function>

The next version of octave (3.6) implements the <code>CollectOutput</code> switch as seen in example 8 here:                    http://www.mathworks.com/help/techdoc/ref/textscan.html

The next version of octave (3.6) implements the <code>CollectOutput</code> switch as seen in example 8 here:                    http://www.mathworks.com/help/techdoc/ref/textscan.html
+
+
==Using Variable Strings in Octave Commands==
+
+
For example, to plot data using a string variable as a legend:
+
+
Option 1 (simplest):
+
legend = "-1;My data;";
+
plot(x, y, legend);
+
+
Option 2 (to insert variables):
+
plot(x, y, sprintf("-1;%s;", dataName));
+
+
Option 3 (not as neat):
+
legend = 'my legend';
+
plot_command = ['plot(x,y,\';',legend,';\')'];
+
eval(plot_command);
+
+
These same tricks are useful for reading and writing data files with unique names, etc.
+
+
==Vectorizing Tricks===
+
+
You can easily fill a vector with an index:
+
for i=1:n, x(i) = i; end
+
+
x = [1:n];
+
+
This works for expressions on the index by wrapping the index in an expression:
+
for i=1:n, x(i) = sin(2*pi*i*f/r); end
+

+
x = sin(2*pi*[1:n]*f/r);
+
+
You can also work with other vectors this way:
+
for i=1:n, x(i) = sin(2*pi*y(i)*f/r); end
+
+
x = sin(2*pi*y*f/r);
+
+
Conditionals in the for loop are a little bit tricky. We need to create an index vector for the true condition, and another for the false condition, then calculate the two independently.
+
+
for i=1:n, if y(i)<1, x(i)=y(i); else x(i) = 2*y(i); endif
+
+
idx = y < 1;
+
x(idx) = y(idx);
+
x(!idx) = 2*y(!idx);
+
+
+
*examples from matrices
+
*tricks with sort and cumsum (e.g., hist, lookup)
+
*counter-examples such as a tridiagonal solver
+
*sparse matrix tricks
+
*tricks relying on fortran indexing
+
+
===Other references===
+
*MATLAB array manipulation tips and tricks by Peter Acklam: http://home.online.no/~pjacklam/matlab/doc/mtt/index.html
+
*The MathWorks: Code Vectorization Guide: http://www.mathworks.com/support/tech-notes/1100/1109.html