Python 名称错误:全局名称';numpy';没有定义
我正试图通过收集essentia(MIR库)函数来编写一个功能提取器。 流程图类似于:单个特征提取、pool、PoolAggregator、concatenate,使用Python 名称错误:全局名称';numpy';没有定义,python,numpy,Python,Numpy,我正试图通过收集essentia(MIR库)函数来编写一个功能提取器。 流程图类似于:单个特征提取、pool、PoolAggregator、concatenate,使用np从PoolAggregator形成整个特征列表。concatenate 即使不导入numpy,脚本在ipython笔记本下也能正常运行。 我正在收集从上一阶段获得的数组或浮点数,但错误消息:“NameError:未定义全局名称'numpy'”显示 我尝试将“import numpy as np”放在模块顶部: import n
np从PoolAggregator形成整个特征列表。concatenate
即使不导入numpy,脚本在ipython笔记本下也能正常运行。
我正在收集从上一阶段获得的数组或浮点数,但错误消息:“NameError:未定义全局名称'numpy'”
显示
我尝试将“import numpy as np”放在模块顶部:
import numpy as np
def featureExtractor(path):
或在函数中:
def featureExtractor(path):
import numpy as np
或在主文件中的模块外部:
import numpy as np
from featureExtractor import featureExtractor
这些都解决不了,请帮帮我
以下是脚本:
from essentia.standard import *
import essentia
def featureExtractor(path):
loader = MonoLoader(filename = path)
x = loader()
pool = essentia.Pool()
spectrum = Spectrum()
w = Windowing(type = 'hann')
# Create needed objects
mfcc = MFCC()
centroid = Centroid()
for frame in FrameGenerator(x, frameSize = 1024, hopSize = 512):
mfcc_bands, mfcc_coeffs = mfcc(spectrum(w(frame))) # output: vector_real
spec_centroid = centroid(spectrum(w(frame))) # output: real
pool.add('lowlevel.mfcc', mfcc_coeffs)
pool.add('lowlevel.centroid', spec_centroid)
aggrPool = PoolAggregator(defaultStats = [ 'mean', 'var' ])(pool)
# calculate mean and var for each feature
# build a feature vector of type array
list = ['lowlevel.centroid.mean', 'lowlevel.centroid.var',
'lowlevel.mfcc.mean', 'lowlevel.mfcc.var']
feature_vec = []
for name in list:
feature = aggrPool[name]
if type(feature) != float: # for those type == array
feature_vec = np.concatenate([feature_vec,feature], axis = 0)
else: # for those type == float
feature_vec.append(feature)
return feature_vec
然后在主文件中输入以下命令:
path = "/~/Downloads/~.wav"
from featureExtractor import featureExtractor
featureExtractor(path)
我得到了一个错误:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-109-40b5bbac9b17> in <module>()
1 from featureExtractor import featureExtractor
2
----> 3 featureExtractor(path)
/~/ipython_notebook/featureExtractor.py in featureExtractor(path)
66 for name in list:
67 feature = aggrPool[name]
---> 68 if type(feature) != float: # for those type == array
69 feature_vec = np.concatenate([feature_vec,feature], axis = 0)
70 else: # for those type == float
NameError: global name 'numpy' is not defined
简单地尝试
import numpy
在文件的顶部/~/ipython\u notebook/featureExtractor.py
似乎您的代码期望
numpy
而不是np
作为模块名称。您是否安装了numpy?然后发布剩余的内容。此外,发布剥离代码生成的完整堆栈跟踪。否则,我们将不得不查看您的情况,并猜测这些部分是如何组合在一起的。@EdChum我直接在ipython笔记本中运行脚本,这很好。当我尝试将其用作函数时,会出现错误。这可能意味着您的ipython环境已安装numpy,但您的命令行环境未安装,如果您尝试运行一个刚刚安装了import numpy
的脚本,该脚本是否运行?您需要将numpy安装到python环境中。我刚刚尝试直接在python提示符下运行import numpy
,没有任何错误。如果没有numpy,您将得到一个ImportError。您可以使它与IPython一起工作,而不是与常规python解释器一起工作,这一事实很奇怪。你有自定义安装吗?还有,你重置了IPython的内核吗?否则,您可能会有“剩余”导入。重新启动内核工作!我认为唯一不同的是modulefeatureExtractor.py
中的脚本。我没想到重启内核会解决这个问题!非常感谢你。因此,我在模块的顶部有importnumpyasnp
,它在重启内核后工作。我认为重启所做的唯一一件事就是在Matlab中清除所有的。Python(和IPython)不会在没有重启的情况下重新加载模块(虽然有重启,但并不实用)。
import numpy