4
import KNN
def c(i,d,l,k):
    dss=d.shape[0]
    dm=tile(i,(dss,1))-d
    sqm=dm**2
    sqd=sqm.sum(axis=1)
    dist=sqd**0.5
    sDI=dist.argsort()
    clc={}
    for i in range(k):
        vl=l[sDI[i]]
        clc[vl]=clc.get(vl,0)+1     
    sCC=sorted(clc.items(),key=operator.itemgetter(1),reverse=True)
    return sCC[0][0]

c([0,0],g,l,3)

错误:

Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    c([0,0],g,l,3)
  File "<pyshell#31>", line 12, in c
    sCC=sorted(clc.items(),key=operator.itemgetter(1),reverse=True)
NameError: global name 'operator' is not defined

KNN 包含以下代码:

from numpy import *
import operator

def createDataSet():
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return group, labels

为什么会出现上述错误?程序在 Python 3.3.2 上运行。此代码是在 Python 中运行的简单 k 分类算法。

4

1 回答 1

19

您需要import operator进入本地命名空间;import KNN也不会导入它导入的子模块。

通常,您需要明确说明您使用的所有模块和对象,但builtins( https://docs.python.org/2/library/functions.html ) 除外。

与其他一些语言不同,没有隐式导入。

关于导入的高级提示/社论:您可能很想使用KNN.operator. 它在那里可用,因为它是由KNN. 然而,这几乎总是一个令人遗憾的决定,因为混淆了图片:这是一个特殊的模块吗?如果有,它的界面是什么?保存可爱,明确。

于 2013-10-23T22:01:28.047 回答