General issues using MATLAB

advertisement
General issues using MATLAB
Markus Bauer
Tips for programming
•
Before start writing code think of the goals
•
write either pseudocode or make a flowchart of the processes
that are necessary (example: fieldtrip toolbox, even – odd)
MODELLING - Examples:
Start Stim program
Type in subject number
Produce moving dots for backgroud,
100 frames
Load main task images
Start presentation
Repeat 4 times, Record response
Repeat again, Calculate mean over last 5 trials
no
Higher than alpha
Go the next image
lower than alpha
Increase image contrast
End of images?
yes
Calculate overall time, save result, end
Tips for programming
•
Before start writing code think of the goals
•
write either pseudocode or make a flowchart of the processes
that are necessary (example: fieldtrip toolbox, even – odd)
•
if the software you are writing is (part of) a bigger project, think
of how to organize the different functions
1. Modularization: which operations are needed by many
different functions of your software -> write an own function
for that (rather than include it in the main program)
Tips for programming
Tips for programming
•
Before start writing code think of the goals
•
write either pseudocode or make a flowchart of the processes
that are necessary (example: fieldtrip toolbox, even – odd)
•
if the software you are writing is (part of) a bigger project, think
of how to organize the different functions
1. Modularization: which operations are needed by many
different functions of your software -> write an own function
for that (rather than include it in the main program)
2. Keep the structure of the functions similar (e.g. input/output
format)
Tips for programming
•
Before start writing code think of the goals
•
write either pseudocode or make a flowchart of the processes
that are necessary (example: fieldtrip toolbox, even – odd)
•
if the software you are writing is (part of) a bigger project, think
of how to organize the different functions
1. Modularization: which operations are needed by many
different functions of your software -> write an own function
for that (rather than include it in the main program)
2. Keep the structure of the functions similar (e.g. input/output
format)
3. Think carefully of the data-format
Tips for programming
Within each function:
•
Give variables meaningful names, be careful using “i” (complex
number)
•
Avoid the use of loops – try to make use of matrices wherever you
can – that has consequences for the data-format you choose! (cell
arrays or structure arrays more difficult to handle…)
•
Make use of commenting – understanding code (from sb else or
years after writing it) can actually be more difficult than writing new
code
•
Trade off between ‘programming elegance’ and ‘readability’ / speed:
it is often possible to squeeze 5 lines of code done step by step into a
single line – but it is increasingly difficult to understand for humans
with limited working memory capacity  more errors, difficult to
debug + MATLAB itsself is not completely bug-free
Tips for programming
•
You may create subfunctions for repeated operations within one
function, however:
•
those will not be visible on the MATLAB path
•
Memory allocation within subfunctions is restricted – you cannot
dynamically create new variables during runtime (or debugging)
 only makes sense if an operation is repeated within only one
function, many times
Tips for programming
Process optimizing:
•
Once more: avoid loops
•
Memory allocation and fragmentation
•
even with modern computers memory is not unlimited
•
esp Windows suffers from inefficient memory-allocation, memory
becomes fragmented (LINUX much better)
http://www.mathworks.com/support/tech-notes/1100/1106.html
•
Solutions:
•
use lower bit depth (single instead of double [64bit…])
•
preallocate memory:
e.g. data = zeros(400,275,2000)*NaN;
rather than incrementally filling it
Working with data
Especially when writing a toolbox it is particularly important to think
about how you want to structure your data:
•
Which information do you want to keep? (header info,
preprocessing steps etc)
•
How shall the raw data be organized – observables (e.g. voxels
or channels) and repetitions (trials, sessions etc) – struct array,
cell array or simple matrix?
•
How are data stored? Requirement for specific directory
structure, multiple files or leave it to user?
•
How about ‘missing’ data, e.g. due to artefacts or otherwise
nonusable data points (e.g. bad channels in EEG)
Working with data
For missing data, as often found in empirical science, ‘NaN’ is a
convenient tool to fill these ‘gaps’.
Features of NaN, Inf:
•
can be included in any array (matrix), cell array etc – preserves
the regular shape of a matrix
•
can easily be retrieved with ‘isnan’ or ‘isinf’
•
for descriptive statistics ‘nanmean’, ‘nanstd’, ‘nanmedian’ exist,
that can handle NaN’s (part of statistics toolbox, but can easily
be written)
•
more advanced functions, e.g. ‘fft’, however, will crash…
Solution: eliminate observations that contain NaN’s for advanced
processing steps
Download