Tips and tricks¶
Advanced Matlab / Octave concepts¶
Logical masking¶
A logical mask is an array of type logical
, and can only contain values true
and false
.
For example,
my_arr=[false, true, true; ... true, false, false];
is an 2x3
array, and values in this array can be indexed as other (e.g. numeric, cell) arrays. For example,
my_arr(:,3)
returns the array in the third colum, that is the 2x1
column vector [true; false]
. Note that when showing a logical array, Matlab / Octave do not show false
or true
values, but 0
and 1
respectively. To see whether a variable a
is a logical array, run whos a
.
A logical array a
can be used to index another array b
, where the result of indexing is an array c
that contains the elements of b
only where a
is equal to true
. Thus, in this example
my_mask=[false,true,true,false,true,false]; my_data=11:16; my_masked_data=my_data(my_mask);
the contents of my_masked_data
is contains the elements of my_data at positions 2
, 3
and 5
, i.e. my_masked_data=[12,13,15]
. Although it would be equivalent to use (what some may find more intuitive) my_mask_data=my_data(find(my_mask))
, this expression is longer to write and takes a longer time to execute.
Logical arrays can be constructed with the comparison operators <
, <=
, ==
, ~=
, >
, and >=
; for example,
my_data=[11:16, 13:15 9] mask_at_least_12=my_data>12; mask_equal_13=my_data==13;
returns logical masks of the same size as my_data
with values true
where my_data
is at least 12
([false, false, true, true, true, true, true, true, true, true, false]
) and equal to 13
([false, false, true, false, false, false, true, false, false, false]
), respectively.
Finally, the logical operators ~
(negation), &
(element-wise logical-and), and |
(element-wise logical-or) can be used as operators on two logical masks. Thus, in
a=[false, true, false, true]; b=[false, false, true, true];
the expressions:
~a
has the valuetrue
where-ever the corresponding value ina
is false:[true, false, true, false]
.
a & b
has the valuetrue
where-ever the corresponding values ina
andb
are bothtrue
:[false, false, false, true]
.
a | b
has the valuetrue
where-ever at least one of the corresponding values ina
andb
istrue
:[false, true, true, true]
.
When using the logical operators a & b
and a | b
, it is required that a
and b
are of the same size.
Function handles¶
CoSMoMVPA uses the function handle construct for improved modularity when using classifiers and measures. These are references to functions which can be assigned to a variable. The function can be called by calling the name of the variable with parentheses.
For example,
do_magic = @sin;
means that
y=do_magic(x)
is equivalent to
y=sin(x)
When using this for measures,
measure=@cosmo_crossvalidation_measure;
allows using different measures (i.e. functions) by just changing one line of code, for example to
measure=@my_awesome_measure;
which allows reusing code for future analyses and analysis methods. This concept is key not only for measures but also for searchlight analyses. For example, given a suitable neighborhood nbrhood
and measure options opt
,
measure=@cosmo_correlation_measure; ds_corr=cosmo_searchlight(ds,nh,measure,opt);
computes a split-half correlation searchlight map; changing only the top line (and with suitable measure options in opt
),
measure=@cosmo_crossvalidation_measure; ds_corr=cosmo_searchlight(ds,nh,measure,opt);
computes a classification accuracy searchlight map - just by changing the function handle (and the associated measure options in opt
). Importantly, the same neighborhood structure and the same searchlight code is used in both cases.
For more information about function handles, run in Matlab: help function_handle
General tips and tricks¶
Here is a short list of tips and tricks that may make life easier when using CoSMoMVPA.
Use cosmo disp to show the contents of a dataset structure (or any other data structure)
Use
help cosmo_function
to view the help contents of a function. Most functions have anexample
section which shows how the function can be used.Use cosmo check dataset when manually changing contents of a dataset structure. It will catch basic errors in dataset
Use cosmo check partitions when manually creating partitions.
When slicing datasets, often cosmo match can be used to get logical masks that match a (array of) numbers of strings.
For feature selection in MEEG datasets (in particular, selection over time), consider cosmo dim match and cosmo dim prune.