from neuron import h
h.load_file("nqs.hoc")
import numpy
from vector import *
NQS = h.NQS
nqsdel = h.nqsdel
# converts 2D numpy array into an NQS
# NB: each row of the numpy array will be a Vector(column) in the NQS
def np2nqs (npa,names=[]):
nrow,ncol = numpy.shape(npa)
if nrow < 2:
print "np2nqs ERRA: must have at least 2 rows!"
return None
nqo = NQS(nrow)
for i in xrange(nrow):
vrow = py2vec( npa[i] )
nqo.v[i].copy(vrow)
for i in xrange(len(names)): # assign names
nqo.s[i].s = names[i]
return nqo
# converts nqs to numpy array
# NB: each Vector(column) of nq is a column in the numpy array returned
def nqs2np (nq,sidx=None,eidx=None,Full=False):
if Full: nq.tog("DB")
nrow = int(nq.size())
if sidx is None: sidx = 0
if eidx is None: eidx = int(nq.m[0]) - 1
ncol = eidx - sidx + 1
npa = numpy.zeros( (nrow,ncol) )
for i in xrange(sidx,eidx+1,1): npa[:,i-sidx] = numpy.array(nq.getcol(nq.s[i].s).to_python() )
return npa
# convert nqs to a python dictionary
def nqs2pyd (nq,Full=False):
d = {};
if Full: nq.tog("DB");
for i in xrange(int(nq.m[0])): d[nq.s[i].s] = vec2np(nq.getcol(nq.s[i].s))
return d
# adds cols of nq2 to nq1
def NQAddToCols (nq1, nq2):
cols = int(nq1.m[0])
if cols != int(nq2.m[0]):
print "unequal cols!"
return False
for i in xrange(cols):
nq1.v[i].add(nq2.v[i])
return True
# divide cols of nq by N
def NQDivCols (nq,N):
cols = int(nq.m[0])
for i in xrange(cols): nq.v[i].div(N)