Emanuel,
I suggest you add some more details for what you want but I would suggest using Rules and Patterns. For example, each neuron could be defined as neuron[nodeI_, nodeJ_]:= {node that it receives info from, Weight, {list of previous states}}
or possibly neuron[nodeI_, nodeJ_]= {node that it receives info from, Weight, {list of previous states}}
if the information on the right had side can be evaluated at the time of definition. The lookup of a neuron is then just neuron[27,54]
to find a particular neuron.
As an example
Note that if each neuron is different (as I suspect they are), you can make your definition do something like this (where you define the functions "from", "weight", and "state" to setup your neurons. You can define the neurons many different ways but the key is to rely on Mathematica's overloading capability (which is very fast).
In[1]:= neuron[nodeI_, nodeJ_] :=
neuron[nodeI, nodeJ] = {from[nodeI], weight[nodeJ], state[nodeI, nodeJ]}
In[2]:= neuron[1, 5]
Out[2]= {from[1], weight[5], state[1, 5]}
In[3]:= neuron[34, 65]
Out[3]= {from[34], weight[65], state[34, 65]}
In[4]:= ?neuron
Global`neuron
neuron[1,5]={from[1],weight[5],state[1,5]}
neuron[34,65]={from[34],weight[65],state[34,65]}
neuron[nodeI_,nodeJ_]:=neuron[nodeI,nodeJ]={from[nodeI],weight[nodeJ],state[nodeI,nodeJ]}
In my example above, I used the same function to define the neurons as to hold the neurons so that the definition is only run the first time that particular neuron is called. Another alternative is to make a "createNeurons" function and create them all at once as neuron[x,y]={}
. You can also have "UpdateState" functions that operate on your neurons and change them.
I hope this helps but without knowing more about what you want to do, Its hard to go further. Also note that Mathematica can pass functions as data so you can define neurons as lists with functions that travel with each one if that helps.
Regards