Auryn simulator

Simulator for spiking neural networks with synaptic plasticity

User Tools

Site Tools


manual:complexmatrix
no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


manual:complexmatrix [2016/06/16 17:43] (current) – created zenke
Line 1: Line 1:
 +====== Complex Matrix class ======
  
 +As of Auryn v0.8 the library comes with a complex matrix class which generalizes [[SimpleMatrix]] to synaptic connections which can have more than just a single scalar value per connection. [[ComplexMatrix]] is essentially a rank three tensor class optimized for sparse synaptic transmission.
 +
 +More specifically, like SimpleMatrix the complex matrix class implements a sparse matrix that allows fast access of all elements of one row. It provides row iterators to efficiently propagate
 +spikes. Memory has to be reserved when the class is defined and elements can
 +only be inserted row by row starting from "top left to bottom right". This scheme enables
 +related data fields to reside in memory next to each other.
 +
 +ComplexMatrix generalizes SimpleMatrix to a rank 3 tensor in which each
 +synaptic connection can have more than one value (third tensor mode --
 +corresponding to a synaptic state). This allows to efficiently implement state
 +based complex synaptic models which have their own internal dynamics. 
 +Instead of storing all synaptic data values in one long array the synaptic
 +state values are stored in multiple state vectors which can be manipulated
 +efficiently in a vector based manner.
 +
 +For instance, suppose ''w'' holds your instance of ComplexMatris in which you have
 +''set_num_synapse_states(3)''. This makes it a connectivity matrix which reserves
 +three state variables of type AurynWeight per synaptic connection. 
 +Now, decaying all elements of, say, state 3 by a factor ''foo'' is as simple as
 +''w->get_state_vector(2)->scale(foo)''.  
 +Adding two of the states for all synapses
 +becomes 
 +<code>
 +w->get_state_vector(2)->add(w->get_state_vector(3))
 +</code>
 +
 +As you imagine these expressions can quickly become rather lengthy. 
 +It is therefore nice to declare shortcuts in your plastic Connection class such as: 
 +<code>
 +AurynSynStateVector * w_val        = w->get_state_vector(0); 
 +AurynSynStateVector * tagging_val  = w->get_state_vector(1); 
 +AurynSynStateVector * scaffold_val = w->get_state_vector(2);
 +</code>
 +
 +You can now work with these as you are used with AurynVector or
 +AurynStateVector instances ''w_val->saxpy(foo,tagging_val)''
manual/complexmatrix.txt · Last modified: 2016/06/16 17:43 by zenke