Matlab experience

CoSMoMVPA is written with simplicity in mind, and therefore does not require one to be a Matlab expert. However, some minimal knowledge is required. To assess your knowledge of Matlab, below we describe some (subjectively chosen) criteria.

Using these criteria, we would argue that using CoSMoMVPA to analyze your data requires at least the advanced beginner level.

In order to understand implementations, and/or contribute code, the competent level would be required and the proficient level is preferable.

Advanced beginner

The advanced beginner should know be familiar with:

  • starting and exiting Matlab.
  • modifying the Matlab path.
  • using the Matlab editor.
  • array, cell and struct data objects, and how to store data in and retrieve data from these.
  • the difference between a numeric, char and logical data type.
  • the concepts of a scalar, row vector, column vector, and matrix.
  • difference between a script and a function.
  • using a function, and see the help documentation associated with a function.
  • be familiar with for and while loops.
  • understand the if statement.

Competent user

In addition, the competent user should be familiar with:

  • using function handles.
  • allocating memory for data.
  • difference between using a binary mask and indices to access values in a cell or struct.
  • linear and subscripts to access values in a cell or struct.
  • varargin and nargin.
  • perform basic string manipulations.

Proficient user

In addition, the proficient user should be familar with:

  • nested function handles and Currying.
  • bsxfun and cellfun.
  • recursion.
  • the debugging mode and using break points.
  • space- and time complexity.
  • data structures.
  • basic linear algebra.
  • linear- and sub-indexing.
  • modular design of functions.
  • namespaces and closures.
  • profiling.
  • unit testing.
  • git.

(Some other advanced concepts include exceptions and object-oriented programming, but these are, by deliberate decision, not used in CoSMoMVPA).

We have no idea what an expert user should be able to do, because we don’t consider ourselves in that category.