Python 名称错误:全局名称';numpy';没有定义

Python 名称错误:全局名称';numpy';没有定义,python,numpy,Python,Numpy,我正试图通过收集essentia(MIR库)函数来编写一个功能提取器。 流程图类似于:单个特征提取、pool、PoolAggregator、concatenate,使用np从PoolAggregator形成整个特征列表。concatenate 即使不导入numpy,脚本在ipython笔记本下也能正常运行。 我正在收集从上一阶段获得的数组或浮点数,但错误消息:“NameError:未定义全局名称'numpy'”显示 我尝试将“import numpy as np”放在模块顶部: import n

我正试图通过收集essentia(MIR库)函数来编写一个功能提取器。 流程图类似于:单个特征提取、pool、PoolAggregator、concatenate,使用
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的内核吗?否则,您可能会有“剩余”导入。重新启动内核工作!我认为唯一不同的是module
featureExtractor.py
中的脚本。我没想到重启内核会解决这个问题!非常感谢你。因此,我在模块的顶部有
importnumpyasnp
,它在重启内核后工作。我认为重启所做的唯一一件事就是在Matlab中清除所有的。Python(和IPython)不会在没有重启的情况下重新加载模块(虽然有重启,但并不实用)。
import numpy