from math import log
import xlrd
***# from numpy import ****
import operator
def calcShannonEnt(dataSet):#calculata shannonEnt
numEntries = len(dataSet)
labelCounts = {}
for featVec in dataSet:#将当前键值加入字典并记录类别出现的次数
currentLabel = featVec[-1]
if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
shannonEnt = 0.0
for key in labelCounts:#计算香农熵
prob = float(labelCounts[key])/numEntries#使用所有类标签的发生频率计算类别出现的概率
tmp = prob*log(prob,2)
shannonEnt -= tmp#得到香农熵
return shannonEnt
代码在运行时会出现TypeError: return arrays must be of ArrayType的错误,因为log的第二个参数不是base而是out array。如果你只是想执行普通的log操作,可以选择使用numpy.math.log(1.1, 2)或者使用python自带的math模块的log函数,而不是导入numpy中所有的函数TT