一般在报错行处,查看是否有拼写错误,或者括号错误
或者报错行用到的数据定义是否有错误

例子

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: liujie
@software: PyCharm
@file: natives.py
@time: 2020/10/21 17:18
"""
import time
import numpy as np
# 显示进度条
from tqdm import tqdmdef loaddata(filename):"""加载数据集:param filename: 文件路径:return: 数据与标签"""# 存放数据及标签dataArr = []labelArr = []# 读取文件fr = open(filename)# 遍历读取文件每一行for line in tqdm(fr.readlines()):# 获取当前行,并按','进行切割,返回列表curLine = line.strip().split(',')# 获取数据# 将数据进行了二值化处理,大于128的转换成1,小于的转换成0,方便后续计算dataArr.append(int(int(num) > 128) for num in curLine[1:])# 获取标签labelArr.append(int(curLine[0]))# 返回数据集与标签return dataArr, labelArrdef NaivesBayes(Py, Px_y, x):"""通过贝叶斯进行概率估计:param Py: 先验概率分布:param Px_y: 条件概率分布:param x: 要估计的样本:return: 返回所有label的估计概率"""# 设置特征数目featureNum = 784# 设置类别数目classNum = 10# 建立存放所有标记的概率的数组P = [0] * classNum# 对于每一个类别,单独估计其概率for i in range(classNum):# 初始化sum为0,sum为求和项。# 在训练过程中对概率进行了log处理,所以这里原先应当是连乘所有概率,最后比较哪个概率最大# 但是当使用log处理时,连乘变成了累加,所以使用sumsum = 0# 获取某一个类别的某个特征的概率,进行累加for j in range(featureNum):# x[j] = 0或1sum += Px_y[i][j][x[j]]# 最后再和先验概率相加(也就是式4.7中的先验概率乘以后头那些东西,乘法因为log全变成了加法)P[i] = sum + Py[i]# 返回该概率最大值对应的索引,即为分类return P.index(max(P))def model_test(Py, Px_y, testDataArr, testLabelArr):"""对数据集进行测试:param Py: 先验概率:param Px_y: 条件概率:param testDataArr:测试数据集:param testLabelArr: 测试数据标签:return: 返回正确率"""# 错误值计数errorCnt = 0# 遍历测试集的每一个样本for i in tqdm(range(len(testDataArr))):# 获取预测值predict = NaivesBayes(Py, Px_y, testDataArr[i])# 如果预测值不等于标志,则errorCnt + 1if predict != testLabelArr[i]:errorCnt += 1# 返回准确率return 1 - (errorCnt / len(testDataArr))def getAllProbability(trainDataArr, trainLabelArr):"""通过训练集获得先验概率与条件概率:param trainDataArr: 训练数据集:param trainLabelArr: 训练数据集标签:return: 返回先验概率与条件概率"""# 设置特征数目featureNum = 784# 设置类别数目labelNum = 10# 初始化先验概率存放数组Py = np.zeros((labelNum, 1))# 对每个类别进行一次循环,分别计算它们的先验概率分布for i in range(labelNum):# np.mat(trainLabelArr) == i:将标签转换为矩阵形式,里面的每一位与i比较,若相等,该位变为Ture,反之False# np.sum(np.mat(trainLabelArr) == i):计算上一步得到的矩阵中Ture的个数,进行求和(直观上就是找所有label中有多少个# 为i的标记,求得4.8式P(Y = Ck)中的分子)# 贝叶斯估计:分子加1,分母加上K(K为标签可取的值数量,这里有10个数,取值为10)Py[i] = (np.sum(np.mat(trainLabelArr) == True) + 1) / (len(trainLabelArr) + 10)# 转为log形式,防止下溢出Py = np.log(Py)# 计算条件概率 Px_y=P(X=x|Y = y)# 计算条件概率分成了两个步骤,下方第一个大for循环用于累加,参考书中“4.2.3 贝叶斯估计 式4.10”,下方第一个大for循环内部是# 用于计算式4.10的分子,至于分子的+1以及分母的计算在下方第二个大For内# 初始化为全0矩阵,用于存放所有情况下的条件概率,xj只有0和1Px_y = np.zeros((labelNum, featureNum, 2))# 对标记集进行遍历for i in range(len(trainLabelArr)):# 获取当前循环所使用的标记label = trainLabelArr[i]# 获取当前要处理的样本x = trainDataArr[i]# 对该样本的每一维特诊进行遍历for j in range(featureNum):# 在矩阵中对应位置加1# 这里还没有计算条件概率,先把所有数累加,全加完以后,在后续步骤中再求对应的条件概率Px_y[label][j][int(x[j])] += 1# 第二个大for循环,计算式4.10的分母,以及分子和分母之间的除法# 循环每一个标记for label in range(labelNum):# 循环每一个标记对应的每一个特征for j in range(featureNum):# 获取y=label,第j个特诊为0的个数Px_y0 = Px_y[label][j][0]# 获取y=label,第j个特诊为1的个数Px_y1 = Px_y[label][j][1]# 对式4.10的分子和分母进行相除,再除之前依据贝叶斯估计,分母需要加上2(为每个特征可取值个数)# 分别计算对于y= label,x第j个特征为0和1的条件概率分布Px_y[label][j][0] = np.log((Px_y0 + 1) / (Px_y0 + Px_y1 + 2))Px_y[label][j][1] = np.log((Px_y1 + 1) / (Px_y0 + Px_y1 + 2))return Py, Px_yif __name__ == '__main__':start = time.time()# 读取数据集print('start to read trainSet')trainDataArr, trainLabelArr = loaddata('data/mnist_train.csv')print('start to read testSet')testDataArr, testLabelArr = loaddata('data/mnist_test.csv')# 开始训练,学习先验概率与条件概率分布print('start to train')Py, Px_y = getAllProbability(trainDataArr, trainLabelArr)# 使用习得的先验概率与条件概率分布,开始测试print('start to test')accuracy = model_test(Py, Px_y, testDataArr, testLabelArr)# 打印准确率print('accuracy = ', accuracy)# 打印时间end = time.time()print('time=', end - start)

错误为

Traceback (most recent call last):File "D:\softwares\anaconda3\envs\your_env_name\lib\site-packages\IPython\core\interactiveshell.py", line 3343, in run_codeexec(code_obj, self.user_global_ns, self.user_ns)File "<ipython-input-2-4dc2ff38dd49>", line 1, in <module>runfile('D:/PycharmProjects/MyTest/李航统计学习方法/natives.py', wdir='D:/PycharmProjects/MyTest/李航统计学习方法')File "D:\softwares\PyCharm\plugins\python\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfilepydev_imports.execfile(filename, global_vars, local_vars)  # execute the scriptFile "D:\softwares\PyCharm\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfileexec(compile(contents+"\n", file, 'exec'), glob, loc)File "D:/PycharmProjects/MyTest/李航统计学习方法/natives.py", line 236, in <module>Py, Px_y = getAllProbability(trainDataArr, trainLabelArr)File "D:/PycharmProjects/MyTest/李航统计学习方法/natives.py", line 148, in getAllProbabilityPx_y[label][j][x[j]] += 1
TypeError: 'generator' object is not subscriptable

首先,报错行处括号与拼写皆没有错误
然后查看label与x的定义是否有错误,
发现

发现该行列表推导式少了括号dataArr.append([int(int(num) > 128) for num in curLine[1:]])

添加括号后,错误解决

bug9-TypeError: ‘generator‘ object is not subscriptable相关推荐

  1. Hyperopt TypeError: 'generator' object is not subscriptable

    BUG 最近复用以前的代码,结果发现了一个bug,bug如下: File "/home/michael/work/oanda/src/oanda/trend_prediction/find_ ...

  2. python错误提示:TypeError: ‘builtin_function_or_method‘ object is not subscriptable

    [] 换成 () >>> yy.replace['a','s'] Traceback (most recent call last):File "<stdin> ...

  3. python 报错 TypeError: ‘int‘ object is not subscriptable 解决方法

    报错原因 整数上加了下标 不是数组 当作数组 使用 错误情况1: a = 4 c=a[2]# 或者 a = 4 index=2 c=a[index] 报错:line 2, in <module& ...

  4. TypeError: ‘method‘ object is not subscriptable

    TypeError: 'method' object is not subscriptable 目录 解决问题 解决思路 解决方法 解决问题 TypeError: 'method' object is ...

  5. TypeError: 'function' object is not subscriptable

    问题描述: 在进行网格化数据与实测数据的转换过程中,python调用numpy中的函数出现TypeError: 'function' object is not subscriptable的错误 解决 ...

  6. TypeError: ‘builtin_function_or_method‘ object is not subscriptable 报错解决方法

    TypeError: 'builtin_function_or_method' object is not subscriptable 报错解决方法 参考文章: (1)TypeError: 'buil ...

  7. python3 TypeError: 'map' object is not subscriptable

    1.下面语句报错python3 TypeError: 'map' object is not subscriptable map(apply_filters_to_token, sentences) ...

  8. Python错误 TypeError: ‘NoneType‘ object is not subscriptable解决方案汇总

    目录 前言 一.引发错误来源 二.解决方案 2-1.解决方案一(检查变量) 2-2.解决方案二(使用 [] 而不是 None) 2-3.解决方案三(设置默认值) 2-4.解决方案四(使用异常处理) 2 ...

  9. 基于Python贝叶斯优化XGBoost算法调参报错“TypeError: ‘float‘ object is not subscriptable”

    基于Python贝叶斯优化XGBoost算法调参运行情况如下: iter target colsam- gamma max_depth min_ch- subsample 1 0.9398 0.804 ...

  10. python nonetype object is not_python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法...

    发现问题 写python的时候出现了这个错,然后网上的教程的解决方案几乎都是--"重新定义下这个变量",看的我一脸懵逼 后来发现原来是我把return None的方法赋给了变量,之 ...

最新文章

  1. java list 自定义类型转换_java – 可以从List生成平面XML结构的XStream自定义转换器?...
  2. 设置/修改centos上的swap交换分区的方法
  3. 【植物大战僵尸2】算法 笔记
  4. 前端随笔整理[5.14]
  5. 《Python入门到精通》流程控制语句
  6. leetcode python3 简单题13. Roman to Integer
  7. Ruby设计模式透析之 —— 适配器(Adapter)
  8. 游戏筑基开发之双链表及其基本功能(C语言)
  9. 通过银行卡前缀判断归属
  10. html怎么把图做成3d效果,ps怎么制作立体效果 ps做图怎么做出立体的效果
  11. 正规的伦敦金投资平台排行榜(top 10)
  12. Shine 和 8hz-mp3
  13. python输出复数去掉括号_从字符串中删除常用词(及其复数形式)的技术
  14. 拼多多新店扶持期是多久?
  15. MCE公司:更有效的新型小分子CDK9抑制剂
  16. [软考]系统架构设计师 备考经验分享(二) - 知识点学习+综合知识篇
  17. 转载:关于Vivado综合选项——Out of context per IP和Gobal
  18. 烟台地铁路线图 Yantai Subway
  19. MATLAB三维图变黑 | shading interp作用
  20. 开发者视角论述HTML5平台的7大特点

热门文章

  1. 【小技巧】自定义asp.net mvc的WebFormViewEngine修改默认的目录结构
  2. 【接口测试】axios测试接口
  3. springboot中解决servlet乱码问题,使用配置类注册过滤器解决
  4. shell 命令 --ps aux | grep
  5. rest-framework框架的基本组件
  6. python-unittest学习2--生成报告
  7. o'Reill的SVG精髓(第二版)学习笔记——第四章
  8. KingDZ 变菜鸟,每日一个C#小实例之---玩转鼠标
  9. STM32f407---oled屏幕配套取字模软件使用
  10. GoogleTest测试框架介绍(一)