一、numpy和matplotlip的读书笔记。
1.numpy的介绍:
一个用python实现的科学计算,包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。
(1)模块导入:
>>> import numpy as np
(2)生成数组
生成数组 >>> np.array([1, 2, 3, 4, 5]) # 把列表转换为数组 array([1, 2, 3, 4, 5]) >>> np.array((1, 2, 3, 4, 5)) # 把元组转换成数组 array([1, 2, 3, 4, 5]) >>> np.array(range(5)) # 把range对象转换成数组 array([0, 1, 2, 3, 4]) >>> np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组 array([[1, 2, 3], [4, 5, 6]]) >>> np.arange(8) # 类似于内置函数range() array([0, 1, 2, 3, 4, 5, 6, 7]) >>> np.arange(1, 10, 2) array([1, 3, 5, 7, 9])
(3)数组与数值的运算
数组与数值的运算 >>> x = np.array((1, 2, 3, 4, 5)) # 创建数组对象 >>> x array([1, 2, 3, 4, 5]) >>> x * 2 # 数组与数值相乘,返回新数组 array([ 2, 4, 6, 8, 10]) >>> x / 2 # 数组与数值相除 array([ 0.5, 1. , 1.5, 2. , 2.5])
(4)数组与数组的运算
数组与数组的运算 >>> a = np.array((1, 2, 3)) >>> b = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9])) >>> c = a * b # 数组与数组相乘 >>> c # a中的每个元素乘以b中的对应列元素 array([[ 1, 4, 9], [ 4, 10, 18], [ 7, 16, 27]]) >>> c / b # 数组之间的除法运算 array([[ 1., 2., 3.], [ 1., 2., 3.], [ 1., 2., 3.]]) >>> c / a array([[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.]])
(5)转置
转置 >>> b = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9])) >>> b array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> b.T # 转置 array([[1, 4, 7], [2, 5, 8], [3, 6, 9]])
(6)点积/内积
点积/内积 >>> a = np.array((5, 6, 7)) >>> b = np.array((6, 6, 6)) >>> a.dot(b) # 向量内积 108
(7)改变数组大小
改变数组大小 >>> a = np.arange(1, 11, 1) >>> a array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) >>> a.shape = 2, 5 # 改为2行5列
(8)切片操作
切片操作 >>> a = np.arange(10) >>> a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> a[::-1] # 反向切片 array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) >>> a[::2] # 隔一个取一个元素 array([0, 2, 4, 6, 8]) >>> a[:5] # 前5个元素 array([0, 1, 2, 3, 4])
............................................(还有其他 的运算方法,在此不再细说)
2.Matplotlib
Matplotlib 是一个
Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形
。
通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
(1)Matplotlib基础知识
简单图形绘制:
import numpy as np import matplotlib.pyplot as plt x = np.array([1,2,3,4,5,6,7,8]) y = np.array([3,5,7,6,2,6,10,15]) plt.plot(x,y,'r')# 折线 1 x 2 y 3 color plt.plot(x,y,'g',lw=10)# 4 line w # 折线 饼状 柱状 x = np.array([1,2,3,4,5,6,7,8]) y = np.array([13,25,17,36,21,16,10,15]) plt.bar(x,y,0.2,alpha=1,color='b')# 5 color 4 透明度 3 0.9 plt.show()
import numpy as np import matplotlib.pyplot as plt for i in range(0,15): # 1 柱状图 dateOne = np.zeros([2]) dateOne[0] = i; dateOne[1] = i; y = np.zeros([2]) y[0] = 10 y[1] = 20 plt.plot(dateOne,y,'r',lw=8) plt.show()
二、利用雷达图显示自己的测试成绩
#-*- coding:utf-8 -*- import numpy as np import matplotlib.pyplot as plt #标签 labels = np.array(['第一周','第二周','第三周','第四周','第五周']) #数据个数 dataLenth = 5 #数据 data = np.array([20,20,20,20,20]) angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False) data = np.concatenate((data, [data[0]])) # 闭合 # #将数据结合起来 angles = np.concatenate((angles, [angles[0]])) # 闭合 fig = plt.figure() ax = fig.add_subplot(121, polar=True)# polar参数!!代表画圆形!!!! #111代表总行数总列数位置 ax.plot(angles, data, 'bo-', linewidth=1)# 画线四个参数为x,y,标记和颜色,闲的宽度 ax.fill(angles, data, facecolor='r', alpha=0.1)# 填充颜色和透明度 ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei") ax.set_title("海棠未眠的成绩表", va='baseline', fontproperties="SimHei") ax.set_rlim(0,20) ax.grid(True) plt.show()
结果显示如下:
三、手绘一座山的等高线:
代码如下:
import matplotlib.pyplot as plt import numpy as np # 定义等高线高度函数 def f(x, y): return (1 - x / 2 + x ** 5 + y ** 3) * np.exp(- x ** 2 - y ** 2) # 数据数目 n = 256 # 定义x, y x = np.linspace(-3, 3, n) y = np.linspace(-3, 3, n) # 生成网格数据 X, Y = np.meshgrid(x, y) # 填充等高线的颜色, 8是等高线分为几部分 plt.contourf(X, Y, f(X, Y), 8, alpha = 0.75, cmap = plt.cm.hot) # 绘制等高线 C = plt.contour(X, Y, f(X, Y), 8, colors = 'black', linewidth = 0.5) # 绘制等高线数据 plt.clabel(C, inline = True, fontsize = 10) # 去除坐标轴 plt.xticks(()) plt.yticks(()) plt.show()