本文整理汇总了Python中brian2.NeuronGroup.k方法的典型用法代码示例。如果您正苦于以下问题:Python NeuronGroup.k方法的具体用法?Python NeuronGroup.k怎么用?Python NeuronGroup.k使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类brian2.NeuronGroup
的用法示例。
在下文中一共展示了NeuronGroup.k方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: run_cpp_standalone
# 需要导入模块: from brian2 import NeuronGroup [as 别名]
# 或者: from brian2.NeuronGroup import k [as 别名]
def run_cpp_standalone(params, network_objs):
import os
from numpy.fft import rfft, irfft
from brian2.devices.device import CurrentDeviceProxy
from brian2.units import Unit
from brian2 import check_units, implementation, device, prefs, NeuronGroup, Network
tempdir = os.path.join(params["program_dir"], "cpp_standalone")
tempdir = os.path.join(tempdir, "c_" + str(params["sigma_c"]) + \
"_s_" + str(params["sigma_s"]))
if not os.path.exists(tempdir):
os.makedirs(tempdir)
prefs.codegen.cpp.libraries += ['mkl_gf_lp64', # -Wl,--start-group
'mkl_gnu_thread',
'mkl_core', # -Wl,--end-group
'iomp5']
# give extra arguments and path information to the compiler
extra_incs = ['-I'+os.path.expanduser(s) for s in [ tempdir, "~/intel/mkl/include"]]
prefs.codegen.cpp.extra_compile_args_gcc = ['-w', '-Ofast', '-march=native'] + extra_incs
# give extra arguments and path information to the linker
prefs.codegen.cpp.extra_link_args += ['-L{0}/intel/mkl/lib/intel64'.format(os.path.expanduser('~')),
'-L{0}/intel/lib/intel64'.format(os.path.expanduser('~')),
'-m64', '-Wl,--no-as-needed']
# Path that the compiled and linked code needs at runtime
os.environ["LD_LIBRARY_PATH"] = os.path.expanduser('~/intel/mkl/lib/intel64:')
os.environ["LD_LIBRARY_PATH"] += os.path.expanduser('~/intel/lib/intel64:')
# Variable definitions
N = params["NI"] # this is the amount of neurons with variable synaptic strength
Noffset = params["NE"]
neurons = network_objs["neurons"]
params["rho0_dt"] = params["rho_0"]/second * params["rate_interval"]
mkl_threads = 1
# Includes the header files in all generated files
prefs.codegen.cpp.headers += ['<sense.h>',]
prefs.codegen.cpp.define_macros += [('N_REAL', int(N)),
('N_CMPLX', int(N/2+1))]
path_to_sense_hpp = os.path.join(tempdir, 'sense.h')
path_to_sense_cpp = os.path.join(tempdir, 'sense.cpp')
with open(path_to_sense_hpp, "w") as f:
header_code = '''
#ifndef SENSE_H
#define SENSE_H
#include <mkl_service.h>
#include <mkl_vml.h>
#include <mkl_dfti.h>
#include <cstring>
extern DFTI_DESCRIPTOR_HANDLE hand;
extern MKL_Complex16 in_cmplx[N_CMPLX], out_cmplx[N_CMPLX], k_cmplx[N_CMPLX];
DFTI_DESCRIPTOR_HANDLE init_dfti();
#endif'''
f.write(header_code)
#MKL_Complex16 is a type (probably struct)
with open(path_to_sense_cpp, "w") as f:
sense_code = '''
#include <sense.h>
DFTI_DESCRIPTOR_HANDLE hand;
MKL_Complex16 in_cmplx[N_CMPLX], out_cmplx[N_CMPLX], k_cmplx[N_CMPLX];
DFTI_DESCRIPTOR_HANDLE init_dfti()
{{
DFTI_DESCRIPTOR_HANDLE hand = 0;
mkl_set_num_threads({mkl_threads});
DftiCreateDescriptor(&hand, DFTI_DOUBLE, DFTI_REAL, 1, (MKL_LONG)N_REAL); //MKL_LONG status
DftiSetValue(hand, DFTI_PLACEMENT, DFTI_NOT_INPLACE);
DftiSetValue(hand, DFTI_CONJUGATE_EVEN_STORAGE, DFTI_COMPLEX_COMPLEX);
DftiSetValue(hand, DFTI_BACKWARD_SCALE, 1. / N_REAL);
//if (0 == status) status = DftiSetValue(hand, DFTI_THREAD_LIMIT, {mkl_threads});
DftiCommitDescriptor(hand); //if (0 != status) cout << "ERROR, status = " << status << "\\n";
return hand;
}} '''.format(mkl_threads=mkl_threads, )
f.write(sense_code)
# device_get_array_name will be the function get_array_name() and what it does is getting
# the string names of brian objects
device_get_array_name = CurrentDeviceProxy.__getattr__(device, 'get_array_name')
# instert_code is a function which is used to insert code into the main()
# function
insert_code = CurrentDeviceProxy.__getattr__(device, 'insert_code')
### Computing the kernel (Owen changed it to a gaussian kernel now)
# Owen uses a trick here which is he creates a NeuronGroup which doesn't
# really do anything in the Simulation. It's just a dummy NeuronGroup
# to hold an array to which he would like to have access to during runtime.
if params["sigma_s"] == np.infty:
k = np.ones(N)/N
elif params["sigma_s"] < 1e-3:
k = np.zeros(N)
k[0] = 1
else:
intercell = params["x_NI"]
length = intercell*N
d = np.linspace(intercell-length/2, length/2, N)
#.........这里部分代码省略.........