大坡3D软件开发

自主操作系统和CPU--用软件和芯片来改变世界
私信 关注
caimouse
码龄19年

毕业于西北工业大学,在IT行业有20多年的经验。拥有20多年的C和C++开发经验,5年以上Python开发经验,资深数据库开发、上百G数据库优化经验。曾经任职嵌入式工程师、P2P开发工程师、银行信用卡交易系统工程师、全自动化电池测试部门经理。

  • 8,469,577
    被访问量
  • 2,250
    原创文章
  • 26
    作者排名
  • 9,785
    粉丝数量
  • 于 2001-09-20 加入CSDN
获得成就
  • 博客专家认证
  • 获得745次点赞
  • 内容获得2,064次评论
  • 获得1,286次收藏
荣誉勋章
兴趣领域
  • #硬件开发
    #单片机#arm开发#FPGA开发#嵌入式硬件#驱动开发
TA的专栏
  • 深入浅出Matplotlib
    付费
    64篇
  • 算法笔记
    付费
    62篇
  • RK3288嵌入式Linux
    付费
    11篇
  • OpenCV
    付费
    232篇
  • milang(小语)
    390篇
  • 机器人
  • Android培训班
    115篇
  • Direct3D
    311篇
  • DOOM
    7篇
  • SDL库
    31篇
  • 计算机图形学
    35篇
  • P2P
    4篇
  • REACTOS
    193篇
  • 培训服务
    5篇
  • 嵌入式软件开发
    82篇
  • 树莓派电脑
    2篇
  • Arduino
    6篇
  • 汇编编译器
    70篇
  • 游戏
    20篇
  • 第二人生
    109篇
  • 综合文章
    78篇
  • 深度学习
    127篇
  • 视频开发
    7篇
  • 计算机
    31篇
  • 谷歌浏览器
    32篇
  • 学习boost
    46篇
  • 51单片机
  • C#
  • 0.编程学习班
    1篇
  • 1.计算机科学
  • 2.编程语言
  • 3.软件开发
  • 4.游戏程序员的数学课
  • 5.游戏编程
  • 6.游戏引擎开发
    68篇
  • 7.计算机图形学
  • 8.游戏音效
  • 9.游戏物理和动画
  • 10.游戏人工智能
  • 11.多人游戏编程
  • JavaScript
    5篇
  • Python二级考试
    21篇
  • 区块链技术
    7篇
  • webpy
    71篇
  • 高等数学
  • 视频教程
    24篇
  • 物理学
    2篇
  • 玩转STM32
    18篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

深入浅出matplotlib(64): 绘制矢量流线图

流线图可以被用来可视化矢量场的流态。如科学和自然学科中的磁场、万有引力和流体运动等均可以用流线图表示。矢量场通过为每个点指定一个线条和一个或多个箭头的方式进行可视化。强度可以用线条长度表示,方向由指向特定方向的箭头表示。通常,力的强度用特定流线的长度显示,但是有时也可以用流线的密度来表示。这种图示经常会在物理应用上,比如要展示磁铁磁场。如果你是物理老师要想在PPT上显示这种图,怎么样来画呢?要使用普通的绘图工具,显然画不出来这样的专业的图。这时就需要使用matplotlib来画这样的流线图了。.
原创
0评论
0点赞
发布博客于 昨天

深入浅出matplotlib(63): 理解路径对象Path的使用

前面在介绍imshow()函数时已经介绍一下路径的基本使用,本文将继续来学习路径对象,深入学习路径的概念,以及可以使用路径对象来实现任何绘图对象显示。什么是路径?表示一系列可能断开的、可能已关闭的线和曲线段。指的是matplotlib.path里面所实现的功能,最简单的路径就是比如一条任意的曲线都可以看成是路径。比如我要绘制一个心形,就需要通过路径去完成。路径只是定义坐标点位置和点与点之间的连接方式,但并不能直接绘出图案,所以要封装一个PathPatch对象来显示出来,相当于来自..
原创
0评论
0点赞
发布博客于 昨天

深入浅出matplotlib(62): 理解hist ()函数的使用

直方图的使用,已经越来越普遍,特别随着数码照相机普及,更多人需要明白它的意义和使用了。如下图:在上面屏幕中白色显示的就是图像的直方图,如果你不了解直方图的意义,显然照不好相片。那么直方图又是何方神圣呢?先来看看百度的解释:直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。直方图是数值数据分布的精确图形表示。 这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔·皮尔逊(.
原创
0评论
0点赞
发布博客于 2 天前

深入浅出matplotlib(61): 理解pcolormesh ()函数的使用三

前面进行了复杂一点的数据创建来使用pcolormesh()函数,接着下来学习一下这个函数的norm参数的使用,因为这个参数可以对图片进行不同级别的量化显示。假如从机器学习里得到的结果有100多种分类,现在不想显示这么多,只想把100种分类分为15种来显示,就相当于再来了一次量化过程。同样,如果使用函数构造的图片,也可以去掉一些细节进行显示。为了演示norm参数的使用,先来构造一些网格数据:# 使用小的变量来增加解析度dx, dy = 0.05, 0.05# 生成两个2维的网格..
原创
0评论
0点赞
发布博客于 6 天前

深入浅出matplotlib(60): 理解pcolormesh ()函数的使用二

前面使用手工的方式来构造pcolormesh()函数的输入值,这样适合比较小的数据,或者说适合演示的例子,如果想构造大一点的数据,或者使用函数来创建数据,就需要继续学习下面的内容。接着来学习使用numpy里的函数来创建一些数据,这里使用numpy的np.random.rand函数,它是创建一个多维的随机数组,下面的代码:Z = np.random.rand(6, 10)它就是创建一个10个元素一行,共6行的数组,如下:[[0.7003673 0.74275081 0.70928001..
原创
0评论
0点赞
发布博客于 7 天前

深入浅出matplotlib(59): 理解pcolormesh ()函数的使用一

在实际工作中,经常需要进行一些分类数据的显示,比如在机器学习中进行分类显示,下图:这里对分类的数据进行结果显示,先把三种边界显示出来,使用了三种不同的颜色,这样很明确地看到分类界线。背景的三种颜色显示,就是采用pcolormesh()函数来创建出来的。如果单纯的绘制散点图,显然不知道边界在什么地方,就没有上面这么清楚了。如果你也想学会这一点,那么就需要了解pcolormesh ()函数的使用,才可以做到这一点。现在就来一步一步地学习pcolormesh ()函数的使用,先从最简单的开始。.
原创
1评论
0点赞
发布博客于 8 天前

深入浅出matplotlib(58): 理解imshow()函数的使用七

前面学习了imshow()函数很多参数的功能,最后来学习一下怎么样在显示图片时,同时进行路径裁剪,这样可以把图片需要部分进行显示,不需要部分进行隐藏。path = Path([[0, 1], [1, 0], [0, -1], [-1, 0], [0, 1]])这行代码创建一个裁剪的路径。Path类构造一系列可能断开的、可能闭合的直线和曲线段。patch = PathPatch(path, facecolor='none')这行代码创建一个截图。然后就可以按下面这样放到函数里:i.
原创
0评论
0点赞
发布博客于 9 天前

深入浅出matplotlib(57): 理解imshow()函数的使用六

继续来学习imshow()函数的参数,本文先来学习vmin, vmax参数,当没有指定norm参数时,默认的情况下,vmin, vmax是输入数据里的最小值和最大值,也就是说整个范围当作颜色的最大范围。有时候,我们想要其中一部分当作颜色的区间,其它超过这个区间的就是越界了,都显示一样的颜色。比如下面默认的图片:接着设置vmin/vmax参数的值后:看到这两个图片显示不一样的效果,是因为vmin和vmax参数设置不一样:plt.imshow(X, vmin = 101, vmax = 18
原创
0评论
0点赞
发布博客于 14 天前

深入浅出matplotlib(55): 理解imshow()函数的使用四

继续来学习下一个参数,它就是aspect,这个参数是两条坐标轴的纵横比,也就是Y轴显示长度除以X轴显示长度的比例。前面的文章也说过,如果想要图形显示不失真,需要两个坐标轴比较一样,也就是设置为equal,如下面的例子:#深入浅出matplotlib-蔡军生(qq:9073204)#https://mysoft.blog.csdn.net/#2020-01-10import numpy as npimport matplotlib.pyplot as pltnp.rand
原创
0评论
0点赞
发布博客于 15 天前

深入浅出matplotlib(56): 理解imshow()函数的使用五

继续来学习imshow()函数的参数,这里来学习origin和extent参数的使用。默认的情况下,不用设置这两个参数也能进行图像显示,不过有些情况下就不能正确显示了,比如图像的数据排列格式不一样,这里默认的情况是图像格式从左上角到右下角的顺序来显示的,如果某种图像格式是由左下角到右上角的方式来显示,就不能显示正确了。这时候就需要使用到origin和extent参数。origin参数主要用来设置数据来源中的X[0][0]数据放在左上角,还是在左下角,如下图:可以看到左图里数据从左上角[0,0]上开始
原创
0评论
0点赞
发布博客于 15 天前

深入浅出matplotlib(54): 理解imshow()函数的使用三

继续前面的内容,学习色图cmap参数,如果想把一些数值按绿颜色分布来显示,那么只需要把cmap参数设置为Greens就行了,如下图:可以看到,整个显示是根据数值越大越绿色来表示,整个例子的代码如下:#深入浅出matplotlib-蔡军生(qq:9073204)#https://mysoft.blog.csdn.net/#2020-01-09import numpy as npimport matplotlib.pyplot as pltnp.random.seed..
原创
0评论
0点赞
发布博客于 17 天前

深入浅出matplotlib(53): 理解imshow()函数的使用二

继续前文的内容向前学习,前面构造了两种数据输入,一种是基于二维的像素,比如(M, N); 接着是另一种(M, N, 3)的RGB的格式,如果你碰到这两种的格式,都可以按前面的方法来显示数据了。在函数的定义里,还有最后一种格式,就是图像里带有透明通道的格式:(M, N, 4),那么这种格式怎么样来显示呢?接着下来就来构造这种数据的例子,把前面的例子修改一下,增加透明的描述,数据就变成这样:X = [[(0.0, 0.1, 0.0, 0.5), (0.5, 0.6, 0.5, 0.5), (1.0, 1
原创
0评论
0点赞
发布博客于 18 天前

深入浅出matplotlib(52): 理解imshow()函数的使用

很多时候,需要数据分析,也需要显示一些图片,那么在matplotlib里是怎么样来显示图片呢?本文将带你来完成这样任务,请你耐心地学习它,毕竟世界以图片来描述的时候太多了,比如吃到美食想要分享,首先想到的就是拿着手机拍照,然后放到朋友圈。再比如到世界名胜风景区,与自己同伴想留念的,就是拍下一张照片,放在自己的网站上。又比如老师想让课堂上的板书保留长久一些,自己拍摄一张照片放到学生群里,让学生不断地复习,巩固学习过的知识。图片是非常重要的一种方式,在matplotlib里显示图片,就成为重要的要求。.
原创
0评论
0点赞
发布博客于 20 天前

深入浅出matplotlib(51): subplots ()函数和subplot()函数的区别

在画布里创建多个子图,有很多方法,但常常使用这两个subplots和subplot函数来创建多个子图,它们都能实现相同的功能,但是它们的使用上还是有点区别。matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)创建一个画布和一个或多个子图返回。matplotlib.pyplot..
原创
0评论
0点赞
发布博客于 22 天前

深入浅出matplotlib(50):怎么样使用plot()函数创建一个折线图

怎么样使用函数plot()来创建一个带有文本标签的折线图?下面这个例子就来解决这个问题。这里使用到的相关函数有:matplotlib.axes.Axes.plotmatplotlib.pyplot.plotmatplotlib.pyplot.subplotsmatplotlib.figure.Figure.savefig先来显示结果图:这个例子非常简单,先调用用numpy的函数生成一个数组,然后调用正弦函数对数组进行计算,这样就准备好数据了,接着下来就调用subplot.
原创
0评论
0点赞
发布博客于 23 天前

深入浅出matplotlib(49):Pyplot使用指南的笔记

本文主要介绍pyplot接口的使用。pyplot的简介matplotlib.pyplot的主要作用就是提供一套函数集合来模拟MATLAB的接口,让使用MATLAB的人无缝迁移过来。每个pyplot函数都是做一些让画布产生改变的事情,比如创建一个画布,创建绘图区的坐标系,在绘图区画一些直线,给曲线添加注释等等。在matplotlib.pyplot里,当函数调用之后内部会保留各种状态,以便跟踪当前绘图的画布和绘图的区域,并且这些函数直接作用于当前的坐标系。注意:pyplot API比..
原创
1评论
0点赞
发布博客于 23 天前

深入浅出matplotlib(48):使用指南的笔记

使用指南本指南主要包含一些基本的使用模式和最基本方法来使用matplotlib。import matplotlib.pyplot as pltimport numpy as np基本都以这两行代码作为开始代码,这样导入matplotlib库和numpy数据处理库。简单的例子matplotlib可以画布上可视化你的数据,而画布可以是Windows窗口、Jupyter窗口等等,每个画布包含有一个或多个坐标轴,这里所指的坐标轴可以是X-Y的直角坐标轴,也可以是角度-半径的极坐标..
原创
0评论
0点赞
发布博客于 25 天前

深入浅出matplotlib(47):以PDF文件格式保存绘图结果

matplotlib可以把结果以多种方式保存,比如以PNG文件,以MP4文件,以GIF文件等等,但是PDF文件在日常生活里使用也很高,因为电子书比较喜欢使用PDF的方式出版,这样可以跨不同的平台共享文件,而文件的格式不会改变,并且很容易输出纸质版本。既然PDF有这么大的应用,那么matplotlib也不会缺席这样的功能,并且它输出PDF文件的过程非常简单,只要数行代码就可以解决。要能保存PDF文件,先要导入matplotlib的后端处理系统,其中backends.backend_pdf是管理PDF.
原创
0评论
0点赞
发布博客于 28 天前

深入浅出matplotlib(46):常用3D图形二

前文学习了三维的坐标系,就可以建立起一个三维的环境,只需要简单地往里面装入数据,就可以显示三维图像出来,比如像下图:在这个图里,Z轴的坐标是从-2到2,X轴和Y轴都是-4PI到4PI,这是一个旋转的曲线,在X轴和Y轴里按圆的角度在变化,而半径是随着高度按抛物线来变化:r = z**2 + 1。因此构造三个坐标轴的数据代码如下:theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)z = np.linspace(-2, 2, 100)r = z**2
原创
0评论
0点赞
发布博客于 28 天前

深入浅出matplotlib(45):常用3D图形一

前面学习了很多2D的图形绘制,但有时候也需要3D的图形来显示数据,这样会对数据的理解有帮助,当然也不是说所有数据使用3D显示就好过2D,还是需要根据实际情况来分析来2D或者3D。matplotlib提供的3D数据显示的功能,也是比较强大,一般的数据显示是能够满足的。本文将开始进入3D数据显示功能的学习,如果你不想使用3D显示的功能,可以不必要看下去了。为了简单起见,先来一个最简单的例子,如下图:跟2D的情况是一样,先要来学习3D的坐标系,然后才能在里面显示数据。上图就是一个最简单..
原创
0评论
0点赞
发布博客于 29 天前

深入浅出matplotlib(44):动画显示与ImageMagick的gif文件输出

前面使用animation.PillowWriter对象来实现输出GIF文件,达到可以让动画轻松地在网页上展示,因为很多网站只支持GIF动画上传,并不支持MP4。不过,不知道你有没有发现,使用animation.PillowWriter对象生成的GIF的身体可能有点肥胖,这样上传的速度变慢,或者下载的速度也变慢,这时候或许要减肥了,那么就需要使用专门的转换软件--ImageMagick。使用ImageMagick的创建,编辑,撰写,或转换位图图像。它可以读取和写入各种格式(超过200种)的图像,包.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(43):动画显示与gif文件输出

前面学习了输出MP4文件,这是非常有用的技术,因为可以发送给别人去观看,无论手机上,还是电脑上都可以查看。不过,要发布到网站上,就有点困难了,因为有一些网站不支持上传MP4文件,只支持GIF文件。像这样的需求,只能学习GIF文件生成技术,接着下来本文就告诉你怎么样来生成GIF文件。其实,只要你学会前面的动画生成,以及MP4文件生成,要想生成GIF,就非常简单了,只需要更改三行代码,就可以生成GIF文件了。所以说前面的技术都是非常基础的,学会了灵活地运用了。下面先来看一下生成的GIF文件:.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(42):动画显示与MP4视频输出五

为了继续熟悉动画显示和MP4文件输出,需要多练习,才能掌握这个技能,别人常说一万小时定律,也就是:一万小时定律是作家格拉德威尔在《异类》一书中指出的定律。“人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成世界级大师的必要条件。”他将此称为“一万小时定律”。要成为某个领域的专家,需要10000小时(1.1415525年),按比例计算就是:如果每天工作八个小时,一周工作五天,那么成为一个领域的专家至少需要五年。这就是一万小时定律。虽然你.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(41):动画显示与MP4视频输出四

前面学习了回调函数animation.FuncAnimation方式来创建动画,这种方式是有很大的优势,因为它是按需地更新数据,而不需要一次性地生成所有的数据,这样占用内存资源是比较小的,当然它也是有一定的不足之处,当数据计算量大时,就会影响动画的输出速度。如果对动画的输出有速度的要求,或者说帧速度比较严格的,就可以采用另外一种方式,就是艺术家方式ArtistAnimation。它刚好与回调方式相反,需要预先生成动画每一帧的数据,然后一次性输入给ArtistAnimation对象,它就会把整个动画数据一帧一
原创
0评论
1点赞
发布博客于 1 月前

深入浅出matplotlib(40):动画显示与MP4视频输出三

前面学习了基本的动画的过程,接着下来继续通过例子来学习动画的各种方式,以便可以应用到实际工作环境中,只需要修改其中的数据,就可以适用于自己的需求。假定在做实验中,做了5次实验,因此得到5次数据,需要把这5次数据进行动态化显示,怎么办呢?现在针对这个问题来进行思考,写出解决的代码。这5次的数据如下:[[2.00000000e-01, 2.00000000e-01, 2.75495888e-02, 1.40100625e-02, 2.00000000e-01], [1.40...
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(39):动画显示与MP4视频输出二

前文介绍了ffmpeg的安装,对于一些人来说也许有点复杂,但就相当于万事具备,只欠东风了。接着下来,就是回到matplotlib里怎么样生成动画,再调用ffmpeg生成视频。其实动画的过程是非常简单的,在一张白纸上画上图像的一部分,接着另外一张白纸上再画上一部分,依次类推,就可以画了很多张白纸,然后让这些白纸不断地从眼前飘过,眼睛里看到的画面就是动画了。同理,在matplotlib也是采用这个原理,只不过把白纸变成画布,把绘图变成函数生成曲线。matplotlib里生成动画,共三种方式:Ani.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(38):动画显示与MP4视频输出

多媒体技术经过20多年的发展,已经非常成熟,动画与视频已经成为主流的生活方式,比如短视频的兴起,每日不刷一下,就感觉不像在过生活。从人的生理上来看,注定是动画和视频的天地,因为人眼观察到活动的物体是非常灵敏的,特别有精神。因此,看书的时候容易比看视频时发困。同理,如果一个老师现在还是拿非动画或非视频的课件来上课,那么课堂上同学走神,容易睡觉的机率就大增。毕竟现在的年轻人,都是给短视频养成了这样的生活方式,对于静态的PPT已经不感兴趣了。另外一些学生在做毕业论文时,也需要使用动画的技术来演示讲解,比.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(37):调整坐标轴的位置二

继续前文的内容来学习,前面学习了根据数据在坐标轴上表示的位置来调整坐标轴的位置,这是移动坐标轴的第一种方式,接着下来介绍第二种方式,如果没有看过前文,建议先查看前面的文章,否则看本文就有点云里雾里,总是身在此山中不知在何处。第二种方式是采用与数据区图像相对位置来定位的方式来移动,比如左边的坐标轴要离图像数据区30个像素点,那么就可以写成这样:("outward", 30)。如果想左边的坐标轴靠近图像数据区30个像素点呢?也非常简单只需要把30改为-30即可:("outward", -30)。同理,.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(36):调整坐标轴的位置

前面学习过隐藏坐标轴的方式来实现三Y轴的显示,并没有移动过坐标轴的位置,但是有时候需要移动坐标到某些位置,这样看曲线更加方便,比如像下图:这时看到抛物线曲线分布在Y轴的两边,Y轴就是一条对称轴,分析起来就更方便了。本文将要介绍怎么样来实现坐标轴的移动。要实现坐标轴的移动,首先要理解matplotlib里坐标轴的布局,如下图所示:从图中可以看到,默认是有四个坐标轴线,简称为spines,在python里就是放到一个spines的字典里,这四个轴通过top、bottom、left、ri.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(35):设置坐标轴个性化显示标签

前面我们学习过坐标轴显示数字、显示弧度、显示角度、显示日期,如果还想自己搞一些特殊的标签显示,又需要怎么办呢?本文将通过例子来演示怎么样实现这样的功能。另外,也需要考虑坐标轴上显示刻度的数量,有时候数据比较大,如果自动显示会显示很多刻度,导致坐标轴比较拥挤,又或者想多显示一些刻度。如果你有这样的需求,就继续看本文。首先来解决第一个问题,就是怎么样个性地显示刻度上的标签。如果你学习前面的文章,会发现弧度显示的代码,就是一种个性化显示,当时没有深入地去解释,现在才有机会来说明这个问题。我们知道坐标轴上.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(34):设置坐标轴显示位置

通过前面的例子看到,默认时坐标轴的位置都是X轴在下面,Y轴在左边,如下图:但是需求是多样化的,有时候想让X轴的坐标在上面,而不是下面;有时候想让Y轴的坐标在右边,而不是在左边。要满足这样的需求,又要怎么样来做呢?本文就来解决这方面的问题。坐标轴的核心组成元素就是刻度线、刻度标签和轴位置,而且坐标轴是绘图区域的关键架构。matplotlib里,一般有四个坐标轴组成一个图,默认情况下是显示左边和下边的坐标轴。要修改坐标轴的显示,都是操作Axes的函数。下面通过例子来演示这些函数的使用,先看结果图:在上
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(33):实现坐标轴显示角度

前面已经学习了怎么样在X轴上显示弧度,可以解决这个特殊的问题,不过有时候X轴上坐标也想使用角度来显示,又需要怎么样做呢?其实有了前面的basic_units.py模块,可以轻松地解决,无后顾之忧。如果你不能导入此文件,记得把它保存在与的源码目录下,这样导入就不会出错了。前面使用的cos函数来画曲线,如果想使用sin函数来画曲线,发现不行了,因为basic_units.py模块里没有实现这个函数,那么就不能使用它了。这时只能自己动手参考cos函数来实现,其实也是很简单的,比如cos函数实现如下:def c
原创
1评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(32):实现坐标轴显示弧度

我们知道做实验,以及写各种报告,很多时候都需要与弧度打交道,因为很多现象都具有周期性,而周期性的数据往往就需要使用三角函数。比如我们日常使用的交流电,通常交流电(简称AC)波形为正弦曲线。交流电可以有效传输电力。但实际上还有应用其他的波形,例如三角形波、正方形波。生活中使用的市电就是具有正弦波形的交流电。由于电源的基础是正弦波,那么在做各种电器实验时,往往就引入正弦波的干扰因素,而分析这种情况时,就需要使用弧度来显示数据,显示数据时,需要把X轴设置为弧度坐标,显示弧度的单位PI。由于PI是一个特殊的符号,要
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(31):实现嵌套子图显示二

在开始学习第二节子图显示的功能之前,先来看一个故事:有个人在和上帝谈论天堂和地狱的问题。上帝对这个人说:“来吧,我让你看看什么地地狱。”他们走进了一间房间,屋里一群人正围着一大锅肉汤。每个人看起来营养不良、绝望又饥饿。他们每个人都有一只可以够到锅里的汤匙,但汤匙的柄比他们的手臂还长,自己没法把汤送进嘴里。他们看上去是那样悲苦。“来吧,我再让你看看什么是天堂。”上帝把这个人领入另一房间。这里的一切和上一间房没有什么不同,一锅汤、一群人、一样的长柄汤匙,但大家都快乐地歌唱。“我不懂,”这个人说,
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(30):实现嵌套子图显示

随着技术的进步,大家要求的水平也越来越高,比如看一个问题,不再从一个角度去分析问题,而是要求从多个角度来分析问题。同理,当你在写论文时,也需要让数据从多个角度来分析,多个角度来显示同一个数据,这样才会更全面地解析问题的本质,以及发现新的理论。又或者老师想让一个数据展示给学生看,也需要从多个方面来显示数据的属性。从一些有名专家论文里,经常看到配图里有嵌套子图的显示,看到这些图时,对问题的理解非常有帮助,能够很全面地解析所需要说明的问题。如果让你来做一些论文的配图,需要使用嵌套子图来实现,你又会做了吗.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(29):使用模块matplotlib.dates实现X轴日期显示三

前面实现了日期的格式显示,接着下来实现一个简单的按小时显示,比如很多天气预报都是采用按小时进行温度提示,如下图:可以看到,X轴的坐标是按小时进行增加,然后曲线里有数据点,再连接起来的曲线。要产生这样的格式的图,matplotlib又要怎么样来编写呢?其实要实现这种格式的显示是比较简单的,首先修改X轴的主刻度显示:host.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))这里设置为按小时和分钟显示。接着生产按小..
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(28):使用模块matplotlib.dates实现X轴日期显示二

前面学习了X轴日期显示的第一个例子,这里继续来学习第二个例子,这样才可以与前面的知识形成对比,形成增量的变化,才能更加深刻体会到代码的作用,函数的功能,熟练地运用日期显示的知识。接着下来实现的结果如下图:在这里,X轴还是显示日期,但是改了一种格式,年份采用四位方式,由于它采用%Y的设置,而前一个例子采用小写的y,这是python日期的格式。与前面不一样的地方,比如每一个大格里,有四个小格,每个小格是6个小时一格。因此相对于前面的代码,作了下面的修改:host.xaxis.set_maj.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(27):使用模块matplotlib.dates实现X轴日期显示

时间是非常重要的,因为每一个人的时间都是一样的,对于所有人都是公平的,但是每一个人在每一个时间单位里创造的价值是不一样的。比如马云每个小时创造的价值可能是1万元,而普通工人可能是每小时10元,差距是非常大的,要比较这种差距,关键是在于时间的计量,只有在相同的时间才可以比较。又比如说在历史长河里,每一百年创造多少价值,也是需要通过时间轴来进行比较,才明显地看出历史的变化。又比如双11光棍节的销售额,如果要把近几年的时间画成曲线,也需要使用时间轴。可见,现实生活里,很多数据都与时间相关,并且沿着时间轴进行,要查
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(26):使用模块patches的Wedge实现饼图

前面学习了patches模块,也知道了一些简单使用,但是知识要在应用中才发现它的好处。本文就来演示Wedge的使用,使用它来实现饼图。饼图最合适用来表示百分比了,因为一个圆就表示百分之百,某一部分就可以使用扇形来表示,这样看起来就比较明了,占得多的面积的就是百分比大的。当然,也可以直接使用matplotlib里的饼图来实现,但是这里主要是演示Wedge模块。当你需自定义一些数据图时,就可以采用类似的方法来实现,也就是实现自定义图表,这样灵活性更大。如果你掌握了这种方法,应付各种实验的论文,各种课堂演示的稿件
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(25):模块patches绘制几何图形

虽然我们可以使用函数来生成点,然后再通过画直线的函数把点连接起来,形成相应的图形,但是这样的绘制的速度比较慢,另外也会遇到各种不同图形的挑战。因此使用matplotlib里的patches模块,就可以去掉这些担忧。在学习这个新模块时,先来一个简单的例子,比如画一个圆如下:画这个圆时,调用了函数mpatches.Circle(),它是来自模块matplotlib.patches,通过下面的代码来引入:import matplotlib.patches as mpatches这时就把它.
原创
1评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(24):实现条件选择区域的颜色填充

前面实现两条曲线围成的区域进行指定的颜色填充,可以解决大部分问题了,但是有时候需要指定两条曲线在交叉点作为分界点,比如X轴小于交叉点的使用一种颜色来填充,X轴大于交叉点的区域,又采用另外一种颜色来填充。因为这种情况常常反映了某种条件进行了突变,进行量上的变化,从而达到质的变化。在做实验报告,或者PPT数据显示时,常常要标注出这种变化的关系,否则作为研究报告是不合格的,作为教学课件更加不合格了。下面来看一个例子,如下图:在这个图里,先看到两个区域填充了两种不同的颜色,在左边的区域填充是红色,.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(23):实现不规则的颜色填充

前面学习了规则图形的填充,可以解决大部分问题了,但是有时候需要进行不规则图形的填充,或者两条曲线相交的部分进行填充,就需要使用另外的方法来解决了,再采用前面用列表的方式来表示点,已经不满足要求了,接着下来采用曲线的方法来构造数据集,然后让系统自动地计算两个数所集的交集。先来看一个简单的例子,把正弦曲线与X轴围成的区域进行填充,如下图所示:往往不规则的图形填充,都是由曲线生成,或者曲线相交生成。这里是采用正弦曲线与X轴围成,因此在代码计算0到2*np.pi的值,就是正弦曲线的一个周期。下面的.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(22):实现多边形的颜色填充

在做各种实验之后,往往需要写报告,而写报告就需要制作各种图表。而图表又需要使用不同的颜色来区分数据,比如数据重叠区,比如数据交叉区。使用颜色来区分,让别人一眼就明白不同的区域,明白这些区域的作用。要解决这些问题,那么就需要学会在matplotlib里怎么样来填充图形区域。先从简单的图形开始进行学习,比如下面就是填充三角形和四边形:主要通过调用函数fill()函数来进行填充,它的定义如下:matplotlib.pyplot.fill(*args, data=None, **kwargs).
原创
1评论
3点赞
发布博客于 1 月前

深入浅出matplotlib(21):实现一元线性回归显示

前面学习了多个Y轴的显示,接着下来对多个Y轴的例子进行一些应用,比如实现一元线性回归的数据显示。因为一元线性回归在实验中经常地使用到,比如质量和重量的实验,比如计算热功当量。另外,由于实验做的次数总是有限的,要想把实验的数据进行推广应用,往往要把数据抽象成一个模型,那么就需要把数据进行回归分析,去掉实验中误差比较大的点。回归分析只涉及到两个变量的,称一元回归分析。一元回归的主要任务是从两个相关变量中的一个变量去估计另一个变量,被估计的变量,称因变量,可设为Y;估计出的变量,称自变量,设为X。回归分.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(20):寄生轴方式实现四个Y轴显示

前面学习了三个Y轴的方式实现,一般情况下的数据显示,可以解决了问题,也可以完成了实验报告了。如果你还有更多的因素相互一起,比如四个Y轴,那么又要怎么办呢?本文将要解决这种问题,无论你是四个Y轴,还是五个Y轴,都可以按照这种方式来解决,以便解决对于Y轴多少的担忧。创建一个寄生轴,这些轴将与主体轴共享x比例,但在y方向显示不同的比例。往往在画图里,比如时间是一条公共的主轴,也就是共享的X轴,因为时间都是相同的比例,然后另外一条Y轴可以表示房价,一条Y轴可以表示面积,一条Y轴表示与地铁站的位置,一条Y轴.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(19):刻度隐藏方式实现三个Y轴显示

前面学习过使用文本画一个Y轴的方式来实现第三条Y轴,或者第四条,第五条的Y轴实现。这是采用了一定的文本技巧的方式,适合在教学的演示图,因为显示出来的第三条Y轴与前面两条Y轴有点差别,导致不太美观。如果追求完美的方式,应该采用内部自画的线条来实现第三条Y轴的实现。下面来介绍第二种方法实现三Y轴显示,这种方法是采用隐藏刻度的方式来实现的,先来看一下图:可以看到这个图里有四个边线,叫做spine,也就是X轴、第一个Y轴、第二个Y轴和最上面的X轴。如果我们想要第三个Y轴,其实只需要第二个Y轴,即是红色刻度的
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(18):三个Y轴显示

前面学习了两个Y轴的数据显示,在matplotlib里有直接的函数支持显示,因此显示两个Y轴的数据是很容易实现的,当然两个Y轴的情况也是最常用的情况,在很多数据显示里都会使用到,但是三个Y轴或者更多的Y轴,也偶尔会使用到的,那么怎么样实现呢?本文将来探索一种三Y轴或者多Y轴的不一样的实现方式。所谓的不一样,不是使用matplotlib里原生的Y轴,而是使用文本字符来构造Y轴的一种方式,这种方式胜在简单,理解起来也非常容易。因为它只是使用字符“|”连接起来而画出一条Y轴,而不是使用直线画出来,另外它采用字符“
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(17):双Y轴显示时把图例显示到一起

前面学习过怎么样在同一个坐标系里显示双Y轴的数据,可以完善地解决了不同的曲线数据按不同的Y轴来绘制,这样尽可能地占用显示区域,看起来比较美观的问题,解决有于数据差距太大,导致一些数据曲线压缩的问题。但是在解决这个问题时,还留下了一个小问题并没有解决,看下图:从这里可以看到,图例分成两个显示,如果想合并到一起,要怎么办呢?其实要解决这个问题,并不太好处理,因为两个数据分两个坐标轴显示的,每次调用plt.legend都只会显示那个Y轴坐标轴的图例,并不能同时显示两个图例。难道就这样算了,不作处理了吗?显
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(16):同一坐标里双Y轴显示

前面学习了在同一个坐标系里显示多条曲线的功能,里面只有一条X轴和一条Y轴,所有曲线都是根据这两个坐标刻度进行显示的。如果曲线的数据比较接近,就可以采用这种坐标系来显示,如果相差比较远,就不行了。比如温度是0到100度,压力可能是1到10,相差了10倍,再用同样的Y轴来表示,就会导致显示的图形不合比例,看到某一条曲线比较小,看起来不美观。那么怎么样来解决这个问题呢?大家可能都会想到,再添加一条Y轴的坐标轴就可以解决了,但是怎么样在matplotlib里添加多一条Y轴呢?要解决这个问题,就得学习matplotl
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(15):同一坐标里显示多条曲线

前面学习了怎么样显示一条简单的数学曲线,是最简单的方式,也是最基本的使用。不过稍为复杂一点的作图,都会需要多条曲线,比如水的沸腾就是在气压和温度的作用下,才能决定它的沸点。人的体重是否超重,也是在重量和身高的相互关系之下才能决定是否健康。因此,往往需要多条曲线在同一个坐标里显示。现在就来学习怎么样在同一个坐标里显示多条曲线。要显示多条曲线,首先要有多条曲线的数据,在这里使用下面的代码来构造两条曲线的数据:x = [20, 40, 60, 80, 100, 120, 140]y1 = [30.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(14):显示简单的数学曲线

使用matplotlib来显示数学曲线是常常使用的功能,因为它是非常简单、灵活和高效。如果你使用绘图软件来显示,可能就不如意了。又或者使用办公软件来生成曲线,就会非常麻烦,没有使用matplotlib这么方便了。但是在实际生活里,经常需要使用这些曲线作为演示,也需要这些曲线来解释很多工作中的成果。比如学生记忆能力与时间的关系,比如学生的体能与训练时间的关系。总之,很多需要绘图的地方,现在已经不用笔和纸去画了,但是也不至于使用那么专业的软件,比如AUTOCAD去画一个简单的数学曲线。虽然有一些人喜欢使用EXC
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(13):旋转向量示意图

作为一个数学老师,当你需要讲向量时,需要使用一些示意图,或者需要动态地修改一下向量的旋转关系。如果作为一个物理老师,也需要讲述力向量的方向和合成。如果需要现场可以动态在修改示意图时,你再采用预先绘制的方式,就不会适用,这时就可以采用matplotlib来动态编程,以便课堂上动态在修改,也可以分发给学生去研究和探索更多的可能性。如果只是给一个PPT,只能看看,而不能动手,也不能更进一步研究这些问题。这样对于学生来说,印象不会很深刻,也不会培训学生动手能力。下面就来介绍一下,怎么样构造下面的旋转示意图.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(12):椭圆示意图

前面学习了圆的示意图,如果让你再做出一个椭圆的示意图呢,你也许以为很简单的,其实不是这样的。因为椭圆的方程需要改写才可以使用到程序里,否则画出来的图,与直线相交的图不在同一个坐标点上。这是由于实际画图的坐标轴不是按比例显示所致,要适应这种情况,就需要使用角度来计算椭圆坐标的点,这样无论比例怎么变化,但是角度不会变形。椭圆上坐标点公式:xp = r*cos(p) yp = r*sin(p)可以得到tan(p)= yp/xp,得到:yp = xp*tan(p)把上式代码椭圆方程:x^2.
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(11):用直线方式画圆

前面学习过使用matplotlib的点函数的方式来画圆弧,显然是可以完成这个任务的,不过有一点问题,就是绘图的速度有点慢,如果绘的点比较多,就更加慢了。其实示意图都不是要求那么完善的圆,所以可以使用直线来逼近,这样也是很难看得出来的,并且速度比点的方式快很多。因此使用画直线的函数plt.plot的方式,主要用来提高显示的速度。在这里主要来学习显示如下图:在这张图里,绘制了不同的圆,有的是使用点划直线方式显示,有的是使用实线,有的是不同圆叠加在一起形成圆环。不管怎么样显示,主要都是使用画圆的参数公
原创
0评论
0点赞
发布博客于 1 月前

深入浅出matplotlib(10):构造圆弧示意图

在很多时候,都需要构造一些示意图,方便观看数据,明白数据的意义。特别是在学校里做老师,或者研究生的论文配图。虽然很多图可以使用绘图软件,或者编辑软件来完成,但是修改起来就比较麻烦一些,如果使用matplotlib来生成,修改一些参数就可以重新生成新的图案,比使用绘图软件或编辑软件来得还快。特别是老师要求课堂上可以动态在修改参数的演示图,就更加来得方便了。下面就是假设老师要画的一个示意图,如图:在这个图里,首先要使用前面学习过的知识来构造一个XY的辅助坐标系,有了这个辅助坐标系,就可以看到X轴和Y轴的
原创
0评论
0点赞
发布博客于 2 月前

深入浅出matplotlib(9):知道两点坐标画直线

有时候需要演示一下直线是怎么样生成的,就可以使用matplotlib作为教学工具,把演示过程动态化,并且可视化,也可以让学生快速地学习和修改直线的算法。知道两点坐标画直线有很多种方法,这里主要介绍使用DDA算法:DDA算法是计算机图形学中最简单的绘制直线算法。其主要思想是由直线公式y = kx + b推导出来的。我们已知直线段两个端点P0(x0,y0)和P1(x1,y1),就能求出 k 和 b 。在k,b均求出的条件下,只要知道一个x值,我们就能计算出一个y值。如果x的步进为1(x每次加1.
原创
1评论
2点赞
发布博客于 2 月前

深入浅出matplotlib(8):辅助指示坐标轴和公式显示

在matplotlib里,虽然有数据的坐标轴设置好了,这个只是为了画数据显示使用的,如果用它来作标示,又有点不足。比如绘图的区域是X轴和Y轴从-10到100,那么原点的位置,就不在(0,0)位置了。这时候,如果图里内容比较复杂,那么看起来就不容易找到原点。为了解决这个问题,需要在坐标点(0,0)的地方显示一个指示用的坐标轴,这样一目了然,就明白图里的数量关系与位置情况。因此需要添加一个辅助坐标系,那么需要怎么来做呢?由于matplotlib里没有现成的函数,一次性地实现这个功能,需要使用它多个函数来
原创
0评论
0点赞
发布博客于 2 月前

深入浅出matplotlib(7):图形失真

在某些方面的应用,需要对画图有一个严格的要求,比如不能把一个长方形显示出来是一个正方形,也不能把一个正方形显示为一个长方形。对于这样显示的问题,简单地来说叫做失真,虽然数值上的坐标点的距离是相等的,但是在屏幕上显示的距离不一样,导致失真。假如老师在教小学生认识正方形,但是老师做出来的课件老是显示为长方形,让学生无法认识正方形。为什么会出现这个问题呢?因为计算机的屏幕是长方形,因此很多程序为了尽可能利用屏幕显示,往往不是数学上严格的比例来显示的,会有一定的比例缩放,这时就会导致失真出现。可以看一下图:
原创
0评论
0点赞
发布博客于 2 月前

深入浅出matplotlib(6):颜色

要想把数据表示得生动的趣,往往需要使用多种颜色来配合,才可以让数据得已区分开来。那么就来学习一下matplotlib的颜色。在matplotlib里主要使用一些简单的字母来表示颜色,比如:‘k’表示黑色;‘b’表示蓝色‘c’表示青色‘g’表示绿色‘m’表示洋红‘r’表示红色‘y’黄色‘gray’或’grey’代表灰色‘lightgray’或’lightgrey’代表浅灰这些颜色都是常用的颜色,如果你想定义一些特别的颜色,上面这些颜色也许不会满足你的需求,那么怎么.
原创
0评论
0点赞
发布博客于 2 月前

深入浅出matplotlib(5):坐标轴的标签和标题

当我们想要使用坐标系来表示数据的关系时,往往需要给坐标系进行命名,比如物理学上的时间-距离曲线,就会把X轴命名为时间,Y轴命名为距离,这样画出来的曲线就是时间-距离曲线。当我们想表示收入-时间曲线时,可以把X轴表示月份,把Y轴表示收入金额。类似的情况有很多,但是总需要给坐标轴进行一个命名,或者分配坐标轴的对应的数据。因此,对于画图来说,一定要标明坐标轴的名称,这时就需要使用到函数plt.xlabel()和plt.ylabel()。如下图所示:代码与图的关系:从上图里可以看到,这两行代码对
原创
0评论
0点赞
发布博客于 2 月前

深入浅出matplotlib(4):网格线的颜色和刻度

有时候想显示的网格线与数据显示的曲线不一样,有明显的对比效应,最先想到的就是使用颜色。比如数据使用使用黑色,而网格使用蓝色。如下图就是显示蓝色的网格线:在这里还是使用plt.grid函数,这个函数的定义如下:matplotlib.pyplot.grid(b=None, which='major', axis='both', **kwargs)由于支持的参数很多,这里主要介绍这几个:b: 这个参数是表示是否显示网格线。如果这个参数为None,但后面有别的参数,说明想显示网格线,就会自动设置
原创
0评论
0点赞
发布博客于 2 月前

深入浅出matplotlib(3):设置绘图区域大小

前面学习了怎么样找到区域,也就是找到可以绘画的地方,现在就相当于画家有了笔和纸,这样要考虑怎么样去布局这张白纸了。如果学习中学的数学,肯定知道画曲线时,先要确定一个坐标系,通常就是画出直角坐标系。要想画出直角坐标系,那么就需要确定原点的位置和两条坐标轴的方向,当然还要确定两条坐标轴的长度,以及每个坐标轴的刻度的大小。那么你就会好奇地问,matplotlib里怎么样设置坐标轴的刻度呢?带着这个问题,下面通过例子演示:在这里可以看到,坐标系的原点是在(-10,-10),最大值分别是10。要设置这样的坐标
原创
0评论
0点赞
发布博客于 2 月前

深入浅出matplotlib(2):绘图区域

假设我们要开始学习画画,那么首先要准备好的工具就是笔和纸,接着根据需要确认纸的方向。一般情况下,纸张都是长方形,要确认它是横着摆,还是竖着摆,不同的摆放会导致显示的空间布局。计算机的发展,也是这样的,可以认为计算机的显示器就是一张白纸,显示器怎么样摆放呢?往往是横着摆放。当我们想要在计算机显示器上显示东西时,那么就需要了解显示器屏幕的坐标布局,一般情况下是如下图所示:屏幕X轴的方向是从左往右,屏幕Y轴的方向是从上往下,这是计算机里显示器的基本方向,但是当你想在这张白纸里显示数据时,并不想按Y轴的方向
原创
0评论
0点赞
发布博客于 2 月前

深入浅出matplotlib(1):为什么要使用matplotlib

第一次工业革命是蒸汽时代,第二次工业革命是电气时代,第三次工业革命是信息时代,马上要迎来第四次工业革命—智能时代。我们知道整个世界主要有三大元素组成:物质、能源和智慧。前两次的工业革命都是则重于物质和能源的进步,后两次的工业革命却是智慧的进步。在信息化时代,已经把世界改造得天翻地覆,那么随着智能时代的到来,将是现在无法想像的。比如所有汽车都具有自动驾驶之后,会不会汽车就是一种机器人的化身?这时马路上所有汽车都是能相互说话,相互配合,像一群蜜蜂一样相互配合之后,做出来的成就远远超出一个蜜蜂的能力。如果汽车真的
原创
0评论
2点赞
发布博客于 2 月前

《Fluent Python》读书笔记-2.9

如果你有很多数组要进行保存数据,并且进行查看和运算,那么你就必须要熟悉memorview的使用,否则你会导致处理数据效率低下。使用memorviewmemorview类是一个共享内存数据的类,当你使用它来切片数组时,并不需要拷贝数据就可以查看。因此,它被大量地使用在NumPy库里。memoryview本质上是Python本身的一种NumPy数组结构。它允许您在数据结构之间共享内存(比如PIL图像、SQLlite数据库、NumPy数组等),无需预先复制。这对于大型数据集是非常重要的。m..
原创
3评论
0点赞
发布博客于 2 月前

《Fluent Python》读书笔记-2.8

在序列容器里有一个经常的操作,那就是排序。list.sort 和 内置sorted函数list.sort方法是把列表在原地进行排序的操作,也就是说不产生新的列表返回,它执行结束之后返回None。此方法返回None表示它不创建新的列表对象返回,并且它在原地修改了列表,这一个编程习惯在Python里形成了传统。因而所有Python的API函数或方法都遵守这个偏好,明确告诉调用者,它在原地对对象作了更改,并没有新对象创建返回。如果你去查看一下,会发现random.shuffle方法也遵守这个规..
原创
0评论
0点赞
发布博客于 2 月前

《Fluent Python》读书笔记-2.7

大家经常使用Python就会发现有一些公共操作,比如对序列容器进行并接和重复。在Python里,主要通过加号(+)和乘号(*)来实现。+和*对容器操作Python编译器的开发人员使用+和*来实现对序列容器进行串联操作。当我们使用+来串联时,一般要求两个参数都是同一个类型的序列容器对象,当拼接完成之后是重新创建了一个新的对象,并不会影响原来的对象。为了拼接多个相同的对象,可以采用*来操作:>>> l = [1, 2, 3]>>> l * 5..
原创
0评论
1点赞
发布博客于 2 月前

《Fluent Python》读书笔记-2.6

切片(Slicing)在所有序列容器,包括列表、元组、字符串等等,它们都支持切片操作,这是Python语言的强大武器,本文将开始学习切片的高级使用技巧。为什么切片和Range操作都不包括最后一项?从Python语法里知道,当进行切片操作时,比如mylist[0,2]的操作,并不包括最后一项[2]。同样range迭代生成也是不包括最后一项,这是到底是什么原因呢?其实它跟C语言和其它很多语言一样,下标变量的开始都是从0开始计算的。使用这样的约定有以下好处:1)容易看出来切片操作或ran.
原创
0评论
0点赞
发布博客于 2 月前

《Fluent Python》读书笔记-2.5

前面学习了元组拆包,用处很多,可以用来多个变量并行赋值、交换数据、调用函数、函数返回值分拆等等。接着思考这样一个问题,如果一个生成器表达式产生不定项的数据,怎么样来进行并行赋值呢?使用星号(*)来接收不定项的赋值在Python的函数里,常常使用*args来接收不定项的函数参数,这是Python的重要编程规则,因此在Python 3以后,也把这个编程规则进行扩展,应用到并行赋值方面:>>> a, b, *rest = range(5)>>> a, b,.
原创
0评论
0点赞
发布博客于 2 月前

《Fluent Python》读书笔记-2.4

元组(tuple)不仅仅是不可改变的列表在很多Python的教材里都是把元组当作不可修改的列表来看待,其实元组不仅如此,还有另外一个大作用,当作没有记录名称的记录数据表示。这种使用方法往往容易被人们忽略它,导致广泛地缺乏认识到它的作用。元组作为记录当你把元组当作记录使用时,元组里每一项当作一个字段,而字段的位置就表示了它的意义。比如(姓名,姓别,学历),这个元组第一项就是表示姓名,所有数据记录必须按照这个顺序来排列。如果你只是把元组当作不变的列表使用时,其实元组里有多少项,或者每项的..
原创
0评论
0点赞
发布博客于 2 月前

《Fluent Python》读书笔记-2.3

接着下来介绍一下怎么样使用列表解析来生成笛卡尔积,其实就是每一项由两个或多个列表的项联组成。如下图所示:笛卡尔积列表解析能从两个或多个列表联合生成笛卡尔积,每一项由每个列表里的项构造,然后保存为一个元组,把这些元组构造成一个列表,这个列表的长度等于所有输入列表长度的乘积。下面的例子:在这里有3种类型和4种花色的牌,可以组成12种结果。接着下来举一个小的例子,假如产生T-shirt有两种颜色和三个尺码,使用列表解析来生成,共有6项:>>> colors..
原创
0评论
0点赞
发布博客于 2 月前

《Fluent Python》读书笔记-2.2

在众多的序列型的容器里,最基本的容器是列表(list),它不仅可修改而且可以昆合不同的数据类型。我相信所有人都学会它的基本操作,但是有点难度的就是列表解析(list comprehension)了。一种强大的构建列表的方法,但由于语法的不熟悉,或不理解,它的作用被低估计了。掌握列表解析就是打开生成表达式的大门,生成表达式在其他用途中,它可以产生元素来填充任何类型的序列。因此通过对比列表解析表达式和生成表达式的方式来理解它们的作用。列表解析(List Comprehensions)和生成表达式(Ge.
原创
0评论
0点赞
发布博客于 2 月前

《Fluent Python》读书笔记-2.1

Python的创建人Guido在创建Python之前,他用了10年的时间在开发一种叫ABC的语言,这种语言是为初学者量身定制。在ABC里定义了很多像目前Python的属性:序列范型操作、内置元组和映射类型、缩进排版结构、没有声明的强类型变量等等。因此,Python对用户这么友好并不是偶然决定的,而是来源于原来ABC语言的一些特性的继承。 Python从ABC语言继承了序列统一操作的习惯,字符串、列表、字节序列、数组、XML元素集和数据库的结果集,都采用一套公共的操作,比如迭代访问、切片、排序和并接...
原创
0评论
0点赞
发布博客于 2 月前

对比学习Python格式化字符串的三种方法(%,format(),f-string)

技术总是随着时代进步而不断地往前推进,也许因为人们对自己的需求不太清楚,也许是由于当时思维模式不对,也许是习惯的力量。在Python的功能里,也是一步一步地往前推进,它的易用性也是一步一步地更方便了。Python 3.6 引入了新的字符串格式化方式 f-string,与其它格式化方式相比,不仅简洁明了,可读性更好,更不容易出错,而且运行效率也更高。你应该马上开始使用这种新的格式化方式,本文将解释其原因与具体用法。但在此之前,让我们先看一下 f-string 之前的字符串格式化方式。 所有编程开发人...
原创
0评论
0点赞
发布博客于 2 月前

Python里变量进行类型备注

众所周知Python是动态语言,变量可以动态地赋值,函数的参数变量也可以动态地改变类型,但是有时候写出下面这样的代码:#学习算法笔记-蔡军生(qq:9073204)#https://mysoft.blog.csdn.net/#2020-10-30def add(x, y): return x + yprint(add(1,2))print(add(1, 'abc'))突然出现一个错误,让你措手不及,这个错误提示如下:Traceback (most recent call
原创
0评论
0点赞
发布博客于 2 月前

Python从zip文件里导入包

有时候为了节省空间,可以把包压缩成zip文件,这样方便管理,方便上传到网络上,也方便拷贝。但是有没有方法可以直接使用zip文件的包,而不需要解压出来呢?这是有的。 先创建一个目录如下:然后把demo目录使用压缩软件,或者使用Python里的zip模块,就可以生成压缩文件mylib.zip。在目录demo中创建__init__.py文件,然后在文件里输入下面内容:#学习算法笔记-蔡军生(qq:9073204)#https://mysoft.blog.csdn.net/#2020-1...
原创
0评论
0点赞
发布博客于 2 月前

Python对于包的使用

随着对Python学习的深入,慢慢就会成长起来,这时薪水也会水高船涨。这是因为你的代码越写越多,积累各种代码模块也越来越多,对于老板布置的任务也越来越得心应手,对于客户提出的要求也越来越随心所欲。一个成长起来的程序员,与初入门的程序员的区别在哪里呢?显然不仅仅是薪水的差别,关键还是能力的差别。当然,能力表现有很多方面,比如处理业务的熟练程度,又或者与同事的配合程度,又或者对公司的流程了如指掌等等。在我认为,一个熟悉程序与入门程序员的最大区别是在于积累。熟练程序之所以这么快完成任务,是因为他的效率比较高,效率
原创
0评论
0点赞
发布博客于 2 月前

Python里__all__变量的作用

在Python的模块里,要想像C语言编写的DLL动态连接库一样,可以提供函数的接口名称,就需要使用__all__变量了。通过这个特性,可以控制哪些函数被外面引用,哪些不能看见。这对一个大工程的软件来说是至关重要,因为没有控制的暴露,会导致别的软件开发人员乱用,从而让软件调用之间出现隐形的问题。比如只给出一个接口的组件,肯定比给出一千个接口的组件使用起来简单。因此,在一个团队的开发配合中,一定要明确这样一条准则:能少不能多,够用就好。把无关重要的接口暴露出来,就会导致更多的问题。__all__ = ['
原创
1评论
0点赞
发布博客于 2 月前

Python -m abc和Python abc.py的区别

学了一段时间Python语言之后,很多人开始编写复杂的软件,这时代码写在一个文件里,已经不太可能。另外,自己想写所有的功能代码也不太可能了,更何况还有老板的deadline。还有不断地重复地造轮子也不是办法,如果有相同的功能,又可以控制的代码,肯定先用这种方式。这时就需要调用别人的模块组件,在调用别人的模块组件时,也许想测试一下它的功能是否够用。这时候再想使用Python abc.py的方式来运行模块的代码,就比较麻烦了,首先你需要找到模块代码所在目录,另外在那个目录下运行,又会导致很多临时文件产生,以及与
原创
0评论
0点赞
发布博客于 2 月前

Python开发人员常犯的几个重大错误

Python 无疑是当今使用最广泛的编程语言,特别是进入人工智能时代,已经成为人工智能开发的主要语言,甚至小学三年级就已经教学该语言。它之所以如此流行,很大程度上是由于简单的语法和老少皆宜的可读性,这使得它非常容易使用。初学者之所以喜欢 Python,是因为它给人一种感觉就像是用英语写一段伪代码一样。但是,无论你有多么丰富的经验,也无论你已经研究过多少种语言,切换到 Python 并不能保证你能做到平稳过渡。具有面向对象编程背景的开发人员很容易忽略 Python 的常用特性,或者说python范式编程。
原创
0评论
0点赞
发布博客于 3 月前

Python多线程时使用屏障对象

如果你仔细地看了我前面的文章,会发现多线程同步里,有已经介绍了锁和事件对象进行同步,接着下来介绍一个比较不一样的同步对象:屏障(threading.Barrier)。屏障对象在多线程同步中设置一道门,而这扇门有一把锁,需要一定数量的线程到达之后才可以解锁。如果先到的线程,就会等待,直到数量满足。这就好比组织一次旅游,所有游客到达大巴时才会开车出发,不会因为几个人先上车,就让大巴开走。所有人到达大巴的事件,就叫做屏障事件。Barrier(parties, action=None, timeout=N.
原创
0评论
0点赞
发布博客于 3 月前

Python使用事件信号进行线程同步

线程同步除了使用线程锁之外,还可以使用事件信号Event类。为什么要使用事件信号呢?其实从生活中的例子就可以懂得这个道理,比如两个人一起煮饭。一个人洗锅,一个人洗米。如果先洗米的人干活比较快,或者说比较懒,只洗一次米,洗完的米就立即倒到锅里,而另外一个还没有把锅洗干净,这时会发生什么呢?不是给洗锅的人一顿骂,就是一顿打了。因为干净的米,放到不干净的锅,那么最后的结果还是不干净的,相当于白做了工作。所以在生活中,两个一起干活时,肯定会让先洗完米的人等一下,直到洗锅的人把锅刷干净,就不会发生这样的事情了。在多线
原创
1评论
0点赞
发布博客于 3 月前

Python使用线程锁

随着技术不断地发展,之前的CPU只有一个核心,现在已经有多达几十个,甚至几百个。这就意味着多线程的程序可以让每个线程可以独占一个CPU核心来运行了。既然每个核心是独立的,那么就会像多人爬山,总有人跑得快,每个人到达山顶的顺序会不一样。如果让多人接力地送一批物资到山上,那么这批人就必须要配合才行,否则中间掉链子。同理,在多线程的程序里,由于CPU的时间片轮转不同,导致线程执行顺序不确定;多核心存在,导致每个核心运行的先后顺序也不一样。因此,如果有一个资源是独占的,必须让多个线程配合才可以执行下去。比如在电脑里
原创
1评论
0点赞
发布博客于 3 月前

Python多线程的使用

有很多人一直无法理解为什么要使用多线程,其实可以这样理解,就像一条高速公路,如果每次只让一辆货车去运货,显然跑得再快,也只是一辆车,整条高速公路还是有空的地方,这样达不到高效地使用高速公路。如果多让几辆车去运货,就不一样的了。所以多线程就像多几辆车一样的,CPU运行得很快,如果只有一个线程运行,那么就像高速公路一样有空闲的地方。多个线程运行起来,整个CPU的效率就整体地提高了效率。当然,不是线程越多越好,在线程达到一定的数量,就会到达峰值,具体是多少没有定数,这个要看任务是做什么。 在Pyth...
原创
1评论
0点赞
发布博客于 3 月前

Python极简地创建HTTP服务器

在所有人的记忆里,创建一个HTTP服务器,也许是非常复杂的,动则几个月的工作量,这是对大型的网站也许是这样的。不过,如果只是想在自己的测试领域里做一下测试,或者说是辅助型的服务器时,就可以非常简单了。又或者是在树莓派这样的嵌入式设备里的小网站,就可以使用简单的服务器了。创建简单的服务器,一定是连接非常少,对性能要求不高,以及没有什么容错机制,也没有什么DNS,也没有动态平衡等等。 在Python标准库中内置了一些测试的HTTP服务器,这些内容在http.server模块中,一般用来测试,或者简单的...
原创
0评论
1点赞
发布博客于 3 月前

Python使用HTTP协议下载文件

HTTP协议是非常重要的,如果没有HTTP协议就可以说没有互联网。因为浏览所有网页,都是来源于HTTP协议的支持,不但包括新闻网站,还包括购物网站,还有众多的搜索网站。在Python里http.client模块提供了一些类,可以向HTTP服务器发送请求,并读取服务器的响应。 首先要确定服务器的URL连接,然后创建HTTPConnection对象且向服务器发起连接,然后调用request向服务器发送请求,最后调用getresponse获取返回对象。通过返回对象,就可以读取服务器所响应的消息内容。...
原创
0评论
0点赞
发布博客于 3 月前

Python的UDPServer类的使用

Python的UDPServer类的使用 前面学习过TCPServer类的使用,如果你没有学过,赶紧回头先看它,否则就不会明白这里的知识。创建服务器对象UDPServer之后,调用serve_forever函数启动一个循环事件,可以不断地接收来自客户端的请求,直到关闭为止。在这里也需要继承BaseRequestHandler类,重载handle方法,这样才可以接收UDP客户端发送过来的消息,同时回应客户端。在这里要注意self.request,它是有两个成员,self.request[0]是表示U...
原创
0评论
1点赞
发布博客于 3 月前

Python的TCPServer类的使用

前面学习使用Socket来创建TCP服务器,但是那样什么都得从头来做,有时候使用起来比较麻烦一些,如果再往前走一步,就是提供一个好用一点的TCP服务器,那么就更加好了。因此Python的标准库里,又提供了这样的功能,它是在模块socketserver里面。 由于socketserver里进行封装,如果不了解它的使用方式,也是无从下手的,即使它好用,也是船家佬捡到犁不会使。作为软件开发人员,这时候就要不怕懒的精神了,一小步一小步地往前拱,总会学得会的。创建服务器对象TCPServer之后,调用ser...
原创
0评论
0点赞
发布博客于 3 月前

也来谈谈造芯之路

芯片,当前无疑是最为紧急的商品;芯片的政策,无疑最需要关注;芯片的方向,无疑成为当前最为关心的事情。在受到国外无端打压之下,怎么样才能走出一条造心之路呢? 有人看到各地有烂尾的项目,就开始质疑造芯的项目了。其实,烂尾的项目是一定会存在的,因为市场经济,它不是计划经济。按照市场经济的规律,一定会出现优胜劣汰,不可能所有项目都是成功的,总会有项目死掉,可能100个项目里,99个死掉了,只有剩下一个的现象。比如美国的INTEL公司只有一个,其它数百数千个公司都已经死掉了。因此,要想让芯片发展起来,风险是...
原创
0评论
0点赞
发布博客于 3 月前

Python的TCP和UDP通信协议

当你正在享受“打工体”:生活里80%的痛苦来源于打工,但是我知道,如果不打工,就会有100%的痛苦来源于没钱,所以在打工和没钱之间,我选择打工。----《打工宣言》头条的时候,发现信息传播是如此之快,热点是一浪接一浪,让人生活得快速而紧凑,时而心里一笑,时而沉默地思考。 在如今的信息化浪潮之下,再来回想一下整个网络的发展,或许知道现在所处的位置。有人曾经说:不了解自己的过去,就没有办法明白现在自己的位置,以及未来走往何处。 在中国的古代,可以看到长城上有很多烽火台,而这些烽火台做...
原创
0评论
0点赞
发布博客于 3 月前

Python文件读写的操作

读写文件是最基本的操作,在UNIX系统里,对所有操作的对象都可以看作为文件,一切都是文件,无论是磁盘的文件对象,还是外设对象。无论是实际的文件,还是虚拟的内存设备。可见在操作系统层上,就定义了文件作为标准的操作标准,因而理解了文件的操作,或者说操作过程,就可以认为对这种编程范式作了深入的理解。文件是系统对设备的一种抽象,也是站在更高层次上对系统的一种设计。 Python读取文件里,一般分为两种文件,一是读写文件文件,一是读写二进制文件。通过Open函数可以打开与文件关联的流,进而完成读取或写入数据...
原创
1评论
0点赞
发布博客于 3 月前

对Python内存流的理解和作用

要理解内存流的概念,那么就需要对硬件有一点了解。我们知道今天的计算机主要有两大部件:CPU和存储器。CPU是中央处理器,主要负责执行、控制、计算等任务,有点像图像馆里的管理员;而存储器就像图书馆里的书,所有知识就保存在书里面。如果要对知识进行处理,需要管理员找到相应的书籍,再经过阅读,就可以拿到知识。因此图书馆的管理就会分类管理,并且添加上固定的标签。整个图书馆就相当计算所有存储器,但是图书馆里会有一些常用图书的书架,专门放置一些常用、常借的图书,这样可以提高书的使用效率,也方便人们去寻找。也有一些比较偏门
原创
0评论
0点赞
发布博客于 3 月前

Python一分钟实现CSV文件读写

跟CSV文件打交道已经很久了,但是脑海里还是记得很清楚,原因就是留下的印象太深刻,仿佛就是昨天发生的样子。记得那一年还是快要大学毕业那年,由于实验数据很多,至少有几个G。由于数据太多,导师要求我们把数据处理一下,把有用数据的抽取出来。就这么一个简单的任务,居然还做出了惊天动地的大错,差点毕业都是成为问题。原来是这样的,共同做实验里有一个同学,他为了显示他惊人的编程能力,采用C语言来编写程序来读取CSV文件,并进行过滤数据,结果他把文件名写错了,把原始的CSV文件数据写入过滤后的数据,结果原始数据丢失了。当他
原创
0评论
0点赞
发布博客于 3 月前

Python一分钟实现JSON文件读写

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理
原创
0评论
0点赞
发布博客于 3 月前

Python极简方法生成Zip文件

进入到21世纪之后,最痛苦的事情,就是数据大爆炸。因为生活无处不在生成数据,比如你发一下微信,发一下图片,再照一些图片,再扫码付款,再到乘车等等。现在各个大公司都在处理大数据的问题,有人说数据就是石油,因为有了数据才能训练AI的模型,才能把数据当燃料,不断地驱动AI向前发展。 当你现在走进沃尔玛时,再也看不到以前的秤,取而代之的是人工智能电子秤。这个人工智能的电子秤非常好用,与之前相比有很大的进步。在这之前,当人们要去买苹果时,拿袋子去选择了苹果之后,拿到秤那里进行称重,这是比较麻烦的事情。因为放...
原创
0评论
0点赞
发布博客于 3 月前

Tk应用程序:列表控件

Listbox控件可以在用户界面上呈现一个文本列表,用户可以从控件视图中进行选择。调用insert方法可以向列表插入元素,方法声明如下:insert(index, *elements)index参数表示要插入元素的位置。如果使用整数值,表示从此索引所对应的元素之前插入新元素;如果index参数为end,则表示始终将新元素插入列表的末尾;如果index参数为active,表示在Listbox控件当前被选中的元素索引处插入新元素。调用delete方法可以删除一个或多个元素,方法定义如下:de
原创
0评论
0点赞
发布博客于 3 月前

Tk应用程序:复选按钮

前面已经学习过单选框,可以从众多的选项里进行唯一的选择,这是很简单的做法,但是这个世界往往没有这么单纯,也就是说这个世界不是像计算机世界里0和1这种表示,而是存在灰度的区域,或者说模糊答案。比如经久不衰的美女问题,当一个男人要选择一个美女谈对象时,往往列出很多条件,这些条件不是单选项,而是复选项。例如脸型好看,身高合适,身材好,或者在这三个条件里综合起来,又或者只要一条即可。因此,要表示这种关系问题,就需要使用复选按钮了。 为了简单起见,只给出美女标准的三个选项,如下图:要实现上面图片的功...
原创
0评论
0点赞
发布博客于 3 月前

Tk应用程序:单选按钮

单选按钮比较常用,主要用在多选择一的情况。往往很多情况下,提供多个选项,但是只能选唯一的答案。比如一个人的性别,不能既选择男,又选择女,这种情况下使用就最合适。在Tk应用程序里,使用控件Radiobutton来实现它。如果在同一个容器中,存在多个Radiobutton控件,那么在同一时刻,只能有一个Radiobutton控件被选中。这时Radiobutton控件具有互斥关系。因此在使用这个控件时,要记得创建一个容器frame,把单选控件放到里面。在创建Radiobutton实例时,要使用两个参数value和
原创
2评论
0点赞
发布博客于 3 月前

Tk应用程序:密码输入框

密码输入框是一个比较常用的控件,因为很多情况下,总有一些输入数据不见得人的,比如你登录电脑的密码,又或者你自己加密的邮件,或者有一些设备管理权限的密码。特别像现在开放办公室越来越多,很多同事就坐在你自己的边上,这时就不好意思把输入的密码显示在电脑屏幕上面了,因为同事瞄一下,就全记住了。如果密码泄漏出去之后,由于某种原因与同事关系紧张的,导致删库跑路的事情。因此,掌握密码输入框,就成为界面开发人员的必备技能。 在Tk应用程序里,主要使用Entry控件来实现,它可以用于文本输入,如果将控件的sh...
原创
0评论
0点赞
发布博客于 3 月前

Tk应用程序:解决长按按钮自动增加数值

在很多年前,有一个同事开发一个应用程序,这个程序是管理库存的,并且是给老板使用的。有这么样一个功能,当按下增加库存按钮,库存量的计算数就增加。一开始设计为用户按下一次,就增加1,按一百次就增加一百。突然有一天,老板要求长按着按钮就可以不断地增加,不必要不断地点击,因为点击要浪费时间,同时手指要运动多,导致手指关节痛。这个同事,就为了开发这个功能,大打军令状:一小时搞定。立即就开始干了起来,一直到下班时候,还是没有搞好。我去问了一下原因,他说使用多线程技术,当按着时就让这个线程计数,当离开时就退出计数。而他的
原创
0评论
0点赞
发布博客于 3 月前