Python绘图示例程序中的几个语法糖果你知道吗

目录
  • 01 示例函数
    • 1.1 代码及结果
    • 1.2 Python函数
  • 02 数组索引
    • 2.1 省略号
    • 2.2 扩增数组维度
    • 2.3 元组相加
    • 2.4 一维变二维
  • 总结

01 示例函数

1.1 代码及结果

import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

def midpoints(x):
   sl = ()
   for i in range(x.ndim):
       x = (x[sl + np.index_exp[:-1]] + x[sl + np.index_exp[1:]]) / 2.0
       sl += np.index_exp[:]
   return x

# prepare some coordinates, and attach rgb values to each
r, theta, z = np.mgrid[0:1:11j, 0:np.pi*2:25j, -0.5:0.5:11j]
x = r*np.cos(theta)
y = r*np.sin(theta)

rc, thetac, zc = midpoints(r), midpoints(theta), midpoints(z)

# define a wobbly torus about [0.7, *, 0]
sphere = (rc - 0.7)**2 + (zc + 0.2*np.cos(thetac*2))**2 < 0.2**2

# combine the color components
hsv = np.zeros(sphere.shape + (3,))
hsv[..., 0] = thetac / (np.pi*2)
hsv[..., 1] = rc
hsv[..., 2] = zc + 0.5
colors = matplotlib.colors.hsv_to_rgb(hsv)

# and plot everything
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.voxels(x, y, z, sphere,
         facecolors=colors,
         edgecolors=np.clip(2*colors - 0.5, 0, 1),  # brighter
         linewidth=0.5)

plt.show()

绘制的3D图像

1.2 Python函数

在代码中,包括有以下几个函数值得进一步的探究,以备之后学习和应用。

  • np.index_exp:产生array 的索引元组;
  • shape() + (3,) : 对于一个元组增加维度;
  • 省略号: 自适应数组索引;

语法糖 (Syntactic Sugar)是为了方便编程人员使用的变化的语法,它并不对原来的功能产生任何影响。

比如:

  • a[i] : *(a+i)
  • a[i][j] : (a+icol +j)

02 数组索引

2.1 省略号

利用省略号,可以自适应匹配前面省略的数组索引。

下面定义了一个3D数字:x。

import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *

x = array([[[1],[2],[3]], [[4],[5],[6]]])
print("x: {}".format(x), "x.shape: {}".format(x.shape))
x: [[[1]
  [2]
  [3]]

 [[4]
  [5]
  [6]]]
x.shape: (2, 3, 1)

下面通过省略号访问x,可以看到它与前面补齐索引是相同的效果。

x1 = x[...,0]
x2 = x[:,:,0]
print("x1: {}".format(x1),"x2: {}".format(x2))
x1.shape: (2, 1, 3, 1)
x2.shape: (2, 1, 3, 1)

2.2 扩增数组维度

扩增数组维度,可以使用一下两个等效的语法来完成。

x1 = x[:,None,:,:]
x2 = x[:,newaxis,:,:]
print("x1.shape: {}".format(x1.shape), "x2.shape: {}".format(x2.shape))
x1.shape: (2, 1, 3, 1)
x2.shape: (2, 1, 3, 1)

2.3 元组相加

元组可以通过“+”串联在一起:

a = (1,2,3)
b = (1,)
print(a+b)
(1, 2, 3, 1)

实际上对于列表也是可以的:

a = [1,2,3]
b = [1]
print(a+b)
[1, 2, 3, 1]

但是list 与 tuple 不能够叠加:

a = [1,2,3]
b = (1,)
print(a+b)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_164/1922126339.py in <module>
      5 a = [1,2,3]
      6 b = (1,)
----> 7 printt(a+b)

TypeError: can only concatenate list (not "tuple") to list

2.4 一维变二维

import numpy
a = array([1,2,3,4])
b = array([5,6,7,8])
d = numpy.r_[a,b]
print("d: {}".format(d))

d: [1 2 3 4 5 6 7 8]

import numpy
a = array([1,2,3,4])
b = array([5,6,7,8])
d = numpy.c_[a,b]
print("d: {}".format(d))

d: [[1 5]
 [2 6]
 [3 7]
 [4 8]]

总结

在Python中还存在一些有趣的 Syntatic Sugar (语法糖果),在编程的时候可以进一步简化编程的效率。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Java之静态代理详解

    目录 什么是代理模式? 什么是静态代理? 静态代理缺点 总结 什么是代理模式? Java代理模式简单来说就是对目标方法的增强. 过年回家我们都要买火车票,前些年买火车票我们需要自己去售票厅买票,而有些地方有火车票的代售点,这些代售点离你很近,你可以很方便地买到火车票.这些代售点等同于代理,买票就是我们的目标,我们可以直接在这些代售点买票,简化了中间过程,节省了我们的时间,这就是Java代理模式的思想. Java中常见的事务.日志都是代理模式的一个应用,只需要加上相应的注解就可以实现事务的开启和提

  • Python+PyQT5实现手绘图片生成器

    手绘图片生成器可以将导入的彩色图片通过python分析光源.灰度等操作生成手绘图片. UI界面的整体部分代码块,UI界面的设计比较简单.效果在上面的图片展示. class HandImage(QWidget): def __init__(self): super(HandImage, self).__init__() self.init_ui() def init_ui(self): ''' UI界面组件及布局 :return: ''' self.setWindowTitle('手绘图片生成器

  • Python matplotlib绘图设置图例案例

    目录 一.语法简介 二.完整代码 一.语法简介 plt.legend(loc=2,edgecolor='red',facecolor='green',shadow='True',fontsize=10) edgecolor 图例边框线颜色  facecolor 图例背景色 shadow 是否添加阴影  title 图例标题 fontsize 设置字体大小 ''' 设置图例位置loc参数简介 best         0  根据图标区域自动选择最合适的位置 upper right  1  右上角

  •  python用matplotlib可视化绘图详解

    目录 1.Matplotlib 简介 2.Matplotlib图形绘制 1)折线图 2)柱状图 3)条形图 3)饼图 4)散点图 5)直方图 6)箱型图 7)子图 1.Matplotlib 简介 Matplotlib 简介: Matplotlib 是一个python的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形,matplotlib 对于图像美化方面比较完善,可以自定义线条的颜色和样式,可以在一张绘图纸上绘制多张小图,也可以在一张图上绘制多条线,可以很方便地将数据可

  • Python海龟绘图详解

    目录 一.画笔和屏幕 二.实战与应用 1.写字 2.用于交互式写字 3.自己控制方向 4.拖动小海龟画图 5.规定时间后开始画 hello,大家好,我是Dream.最近有小伙伴私信我,说让我出一篇海龟画图,这其实我也不太能弄得明白,那在这里我和大家一块梳理一下!记得给我点赞收藏哟~ 一.画笔和屏幕 这里单独拿开一个讲的话会很抽象,因为一个是线,另一个是面,面是线的载体,线是面的内容 首先大家先运行这一段代码: import turtle#调用turtle库 turtle.title("绘制第一只

  • 如何利用python turtle绘图自定义画布背景颜色

    目录 python turtle自定义画布背景色 python turtle设置背景图片 总结 python turtle自定义画布背景色 turtle是python一个简单好用的绘图包,它可以通过设计坐标来实时控制绘图. 安装很简单,一行命令: pip install turtle 这里只介绍如何设置画布背景颜色.它一般是在绘图的最开始进行设置的,可以使用screensize(width, height, bg)函数,其中的三个参数分别是画布的宽.高.背景颜色.宽高的单位是像素,如果用小数表示

  • Python matplotlib绘图建立画布及坐标系

    目录 一.建立画布 二.用plt.subplot函数建立坐标系,并分别绘制折线图和柱状图 三.完整代码如下所示 四.对应效果图如下所示 一.建立画布 import matplotlib.pyplot as plt import numpy as np x=np.arange(8) y=np.arange(8) print(x,y) #建立画布 figsize,它用width和height来控制画布的宽和高 plt.figure(figsize=(8,6),dpi=90) #facecolor='

  • Python OpenCV简单的绘图函数使用教程

    目录 1.画直线的函数是cv2.line 2.画矩形的函数是cv2.rectangle 3.画圆函数是cv2.circle 4.画椭圆的函数是cv2.elipes 5.画多边形的函数是cv2.polylines 6.添加文字的函数是cv2.putText 1.画直线的函数是cv2.line cv2.line函数语法: cv2.line(img,start_point,end_point,color,thickness=0) cv2.line函数参数解释: img:需要画的图像 start_poi

  • python分分钟绘制精美地图海报

    目录 1 简介 2 利用prettymaps快速制作海报级地图 2.1 prettymaps的几种使用方式 2.1.1 圆形模式 2.1.2 圆角矩形模式 2.1.3 添加文字内容 结尾:  1 简介 今天我要给大家介绍的这个Python库prettymaps非常的有趣,基于它,我们只需要简单的代码就可以对地球上给定坐标和范围的任意地区进行地图可视化. 2 利用prettymaps快速制作海报级地图 遗憾的是prettymaps暂时还不能通过pip或conda直接进行安装,但可以利用pip配合g

  • Python绘图示例程序中的几个语法糖果你知道吗

    目录 01 示例函数 1.1 代码及结果 1.2 Python函数 02 数组索引 2.1 省略号 2.2 扩增数组维度 2.3 元组相加 2.4 一维变二维 总结 01 示例函数 1.1 代码及结果 import matplotlib.pyplot as plt import matplotlib.colors import numpy as np from mpl_toolkits.mplot3d import Axes3D def midpoints(x): sl = () for i i

  • 在Python的一段程序中如何使用多次事件循环详解

    背景 本文主要给大家介绍了关于在Python一段程序中使用多次事件循环的相关内容,我们在Python异步程序编写中经常要用到如下的结构 import asyncio async def doAsync(): await asyncio.sleep(0) #... if __name__ == "__main__": loop = asyncio.get_event_loop() loop.run_until_complete(doAsync()) loop.close() 这当然是很不

  • python绘图subplots函数使用模板的示例代码

    背景 使用python进行图像可视化,很多情况下都需要subplots将多幅图像绘制在一个figure中.因为使用频率足够高,那么程序员就需要将其"封装",方便复用,所以,这里将笔者常用的subplots用法记录之. 如果有python绘图使用subplots出现标题重叠的解决方法 的问题,可以参考之. 模板 显示中文 plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文 使用subplot(221) 对应的subplots代码: fr

  • 用什么库写 Python 命令行程序(示例代码详解)

    一.前言 在近半年的 Python 命令行旅程中,我们依次学习了 argparse . docopt . click 和 fire 库的特点和用法,逐步了解到 Python 命令行库的设计哲学与演变.本文作为本次旅程的终点,希望从一个更高的视角对这些库进行横向对比,总结它们的异同点和使用场景,以期在应对不同场景时能够分析利弊,选择合适的库为己所用. 本系列文章默认使用 Python 3 作为解释器进行讲解.若你仍在使用 Python 2,请注意两者之间语法和库的使用差异哦~ 二.设计理念 在讨论

  • python绘图中的 四个绘图技巧

    目录 技巧1: plt.subplots() 技巧2: plt.subplot() 技巧3: plt.tight_layout() 技巧4: plt.suptitle() 数据集: 让我们导入包并更新图表的默认设置,为图表添加一点个人风格. 我们将在提示上使用 Seaborn 的内置数据集: import seaborn as sns # v0.11.2 import matplotlib.pyplot as plt # v3.4.2 sns.set(style='darkgrid', cont

  • Python实现识别文字中的省市区并绘图

    目录 1.准备 2.基本使用 3.高级使用 在做NLP(自然语言处理)相关任务时,经常会遇到需要识别并提取省.城市.行政区的需求.虽然我们自己通过关键词表一个个查找也能实现提取目的,但是需要先搜集省市区关键词表,相对而言比较繁琐. 今天给大家介绍一个模块,你只需要把字符串传递给这个模块,他就能给你返回这个字符串内的省.市.区关键词,并能给你在图片上标注起来,它就是 Cpca 模块. 1.准备 开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Pytho

  • C#使用Win2D在UWP程序中实现2D绘图

    在新的Windows UWP程序中,引入了一个新的API库: Win2D.它是一个d2d的封装,可以直接使用C#来快速实现高效2D绘图了.这个API虽然在Win8.1时代就开始着手开发了,但最近才完善了下来.本文这里就简单的介绍一下它的基本用法: 安装 Win2D并不是Win10 SDK里面的一部分,需要从Nuget上安装,在程序包管理器里直接安装Win2D.uwp即可. PM> Install-Package Win2D.uwp 这个是Win10下的库,Win8下需要使用Win2D.win81

  • 使用IronPython把Python脚本集成到.NET程序中的教程

    从两个优秀的世界各取所需,更高效的复用代码.想想就醉了,.NET和python融合了."懒惰"的程序员们,还等什么? Jesse Smith为您展示如何两个语言来服务同一个.NET程序.你能集两家所长:Python和.NET一起工作,提供可重用的代码功能而不需要你为了一个环境重写代码库. 通过使用IronPython 运行时库,你可以让Python脚本运行在你的.NET程序中.本文向你展示如何使用一个.NET程序中的python脚本获取并展示用户反馈. 如果你曾经有在一个.NET程序中

  • Python实现将SQLite中的数据直接输出为CVS的方法示例

    本文实例讲述了Python实现将SQLite中的数据直接输出为CVS的方法.分享给大家供大家参考,具体如下: 对于SQLite来说,目前查看还是比较麻烦,所以就像把SQLite中的数据直接转成Excel中能查看的数据,这样也好在Excel中做进一步分数据处理或分析,如前面文章中介绍的<使用Python程序抓取新浪在国内的所有IP>.从网上找到了一个将SQLite转成CVS的方法,贴在这里,供需要的朋友使用: import sqlite3 import csv, codecs, cStringI

  • Python程序中设置HTTP代理

    0x00 前言 大家对HTTP代理应该都非常熟悉,它在很多方面都有着极为广泛的应用.HTTP代理分为正向代理和反向代理两种,后者一般用于将防火墙后面的服务提供给用户访问或者进行负载均衡,典型的有Nginx.HAProxy等.本文所讨论的是正向代理. HTTP代理最常见的用途是用于网络共享.网络加速和网络限制突破等.此外,HTTP代理也常用于Web应用调试.Android/IOS APP 中所调用的Web API监控和分析,目前的知名软件有Fiddler.Charles.Burp Suite和mi

随机推荐