python中np没有定义_python:从外部代码导入numpy作为np在我自己的用户定义的modu中丢失...

在使用Python进行科学计算时,作者遇到一个问题:在交互式环境中,通过`reload()`更新模块后,类中使用`np.exp`时出现`NameError`,提示`np`未定义。问题出现在一个类的方法内,该方法定义了一个使用`np.exp`的函数。作者尝试理解命名空间和模块的工作原理,同时寻求优化工作流程和文件结构的建议。
摘要由CSDN通过智能技术生成

我在为科学计算做模拟,我几乎总是想在交互式解释器中查看我的模拟输出。我正试图编写类来定义模拟对象(神经种群),我想通过调用ipython中的脚本%run test_class_WC.py来规范我对这些类的测试。由于包含类的模块/文件在我尝试调试它/添加功能时正在更改,所以每次都会重新加载它。

/试验等级:import WC_class # make sure WC_class exists

reload(WC_class) # make sure it's the most current version

import numpy as np

from WC_class import WC_unit # put the class into my global namespace?

E1 = WC_unit(Iapp=100)

E1.update() # see if it works

print E1.r

所以现在我正在使用reload来确保我已经加载了模块的最新版本,所以我得到了最新的类定义——我确信这是一个笨拙的heck(或者更邪恶的?),但它省去了我做%run WC_class.py和单独调用%run test_WC.py的麻烦

和/WC_类:class WC_unit:

nUnits = 0

def __init__(self,**kwargs):

self.__dict__.update(dict( # a bunch of params

gee = .6, # i need to be able to change

ke=.1,the=.2, # in test_class_WC.py

tau=100.,dt=.1,r=0.,Iapp=1.), **kwargs)

WC_unit.nUnits +=1

def update(self):

def f(x,k=self.ke,th=self.the): # a function i define inside a method

return 1/(1+np.exp(-(x-th)/k)) # using some of those params

x = self.Iapp + self.gee * self.r

self.r += self.dt/self.tau * (-self.r + f(x))

WC_单元基本上定义了一组默认参数,并定义了一个使用基本Euler集成进行更新的ODE。我希望test_class_WC设置一个包含np(和WC_unit,以及WC_class)的全局命名空间

运行时,会出现以下错误:In [14]: %run test_class_WC.py

---------------------------------------------------------------------------

NameError Traceback (most recent call last)

/Users/steeles/Desktop/science/WC_sequence/test_class_WC.py in ()

8

9 E1 = WC_unit(Iapp=100)

---> 10 E1.update()

11

12 # if bPlot:

/Users/steeles/Desktop/science/WC_sequence/WC_class.py in update(self)

19 return 1/(1+np.exp(-(x-th)/k))

20 x = self.Iapp + self.gee * self.r

---> 21 self.r += self.dt/self.tau * (-self.r + f(x))

22

23 # @class_method

/Users/steeles/Desktop/science/WC_sequence/WC_class.py in f(x, k, th)

17 def update(self):

18 def f(x,k=self.ke,th=self.the):

---> 19 return 1/(1+np.exp(-(x-th)/k))

20 x = self.Iapp + self.gee * self.r

21 self.r += self.dt/self.tau * (-self.r + f(x))

NameError: global name 'np' is not defined

现在我可以通过在WC_类模块的顶部将numpy作为np导入,或者甚至在test_类WC中执行from numpy import exp,并将update()方法更改为包含exp()而不是np.exp()。。。但我不想这么做,因为这很简单,我想了解所有这些名称空间/模块的工作原理,这样我就不再是一个python白痴了。为什么np会在WC_单元名称空间中丢失?是因为我要处理两个不同的文件/模块吗?函数内部对np.exp的调用与此有关吗?

我也愿意接受关于改进我的工作流程和文件结构的建议,因为它似乎不是特别的Python。如果有人能理解的话,我的背景是在MATLAB。我正在sublimitext2中编辑.py文件。抱歉,代码不是很小,我一直很难重现这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值