python
时间:2019-04-21 13:06:03
收藏:0
阅读:113
一:Numpy和matplotlib读书笔记
1.Numpy总结
1.Numpy数组
(1)创建数组
1)直接创建
a=np.array([1,2,3,4])
b=np.array([1,2,3,4],[5,6,7,8])
2)使用函数
b=np.arange(10)
linspace,ones,zeros,eye.randn,empty
(2)属性
ndim,shape,stride(跨度)
dtype(通过astype显示转换)
(3)索引和切片
1)一维
a[0],a[:4](半开),a[2:8:2](起始,结束,步长),a[::]
2)二维
a[0,0],a[0][0]
3)布尔数组
a[a%2==0]
&,|,~
4)花式索引
利用整数数组进行索引
arr[[4,0,3,6]]
arr[[1,5,7,2],[0,3,1,2]]
arr[[1,5,7,2]][:,[0,3,1,2]]
arr[np.ix_([1,5,7,2],[0,3,1,2])]
(4)2个注意点
1)Numpy总是试图自动把结果转换为行向量
2)Numpy数组是共享内存的,除非显示复制(.copy())
2.Numpy运算
(1)数组和标量
a+5(每个数加5)
a*3(每个数乘3)
比循环速度快
(2)数组和数组
1)维度相同
对应位置逐个元素进行运算(a+b,c*d)
矩阵内积np.dot()
矩阵外积np.multiply.outer(arr,np.arange(5))
2)维度不同
广播机制
针对布尔数组,可以使用all()/any()函数来返回布尔数组的标量值
(3)内置函数
1)线性代数 :dot,T,inv,qr,diag,trace,det,eig,solve,lstsq
2)随机数 :seed,rand,randint,randn,normal
3)将条件逻辑表述为数组运算:where(cond,x,y)当cond为True选x,否则选y
4)统计: sum,mean,std(标准差)var(方差),min,max,argmin,argmax,cumsum(所有元素的累计和),sumprod(所有元素的累计积)
5)合并和拆分:concatenate([arr1,arr2],axis=0)
6)元素重复操作: tile和repeat
7)花式索引: take和put
8)数组重塑:reshape,ravel(互逆过程),newaxis(传入-1,表示该维度大小由数据本身推断而来)
9)转置和轴对称:T或transpose
10)排序:sort(默认升序),argsort
11)唯一化:np.unique
12)多项式求解和多项式拟合:
创建 p=np.poly1d([1,-4,3]) #x^2-4*x+3
求根 p.roots
阶数 p.order
系数 p.coeffs
拟合 np.polyfit(x,y,n_order(阶数))
13)保存和读取: np.savetxt(‘a.txt‘,a),np.loadtxt(‘a.txt‘)
(4)通用函数
矢量化包装器
一元ufunc
abs,sqrt,square,exp,log,sign,ceil,floor,modf,isnan,isinf,cos,cosh,arccos
二元ufunc
add,substract,multiply,divide,power,maximum,minimum,mod,copysign
(5)C和Fortran顺序
C,矩阵行优先
Fortran,矩阵全都是列优先
!!!注意:axis,0表示按行计算,1表示按列计算。
2.matplotlib总结
4种线性 : - 实线 --虚线 -.点划线 :点线
23种点形状:
23种点形状:
"."point","pixel"o"circle"v"triangle_down
"^"triangle_up"<"triangle_left">"triangle_right"1"tri_down
"2"tri_up"3"tri_left"4"tri_right"8"octagon
"s"square"p"pentagon"*"star"h"hexagon1"H"hexagon2
"+"plus"x"x"D"diamond"d"thin_diamond
"^"triangle_up"<"triangle_left">"triangle_right"1"tri_down
"2"tri_up"3"tri_left"4"tri_right"8"octagon
"s"square"p"pentagon"*"star"h"hexagon1"H"hexagon2
"+"plus"x"x"D"diamond"d"thin_diamond
# 创建一个 8 * 6 点(point)的图,并设置分辨率为 80
figure(figsize=(8,6), dpi=80)
plt.figure(1) # 第一张图
plt.subplot(211) # 第一张图中的第一张子图
plt.xlabel(‘Smarts‘)
plt.ylabel(‘Probability‘)
#添加标题
plt.title(‘Histogram of IQ‘)
#添加文字
plt.text(60, .025, r‘$\mu=100,\ \sigma=15$‘)
#图中任意位置(60, .025)添加文字
plt.axis([40, 160, 0, 0.03])
#设置坐标大小,或x,y分别设置
xlim(-4.0,4.0)
ylim(-4.0,4.0)
xmin ,xmax = X.min(), X.max()
ymin, ymax = Y.min(), Y.max()
dx = (xmax - xmin) * 0.2
dy = (ymax - ymin) * 0.2
dy = (ymax - ymin) * 0.2
xlim(xmin - dx, xmax + dx)
ylim(ymin - dy, ymax + dy)
ylim(ymin - dy, ymax + dy)
#横纵坐标起始终止位置
xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],[r‘$-\pi$‘, r‘$-\pi/2$‘, r‘$0$‘, r‘$+\pi/2$‘, r‘$+\pi$‘])
或 xticks(np.linspace(-4,4,9,endpoint=True))
yticks([-1, 0, +1], [r‘$-1$‘, r‘$0$‘, r‘$+1$‘])
# 设置轴记号,轴记号的标签
plt.annotate(‘local max‘, xy=(2, 1), xytext=(3, 1.5),arrowprops=dict(facecolor=‘black‘, shrink=0.05),)
xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],[r‘$-\pi$‘, r‘$-\pi/2$‘, r‘$0$‘, r‘$+\pi/2$‘, r‘$+\pi$‘])
或 xticks(np.linspace(-4,4,9,endpoint=True))
yticks([-1, 0, +1], [r‘$-1$‘, r‘$0$‘, r‘$+1$‘])
# 设置轴记号,轴记号的标签
plt.annotate(‘local max‘, xy=(2, 1), xytext=(3, 1.5),arrowprops=dict(facecolor=‘black‘, shrink=0.05),)
#用来注释图中的一些特征,要考虑两个点的坐标:被注释的地方xy(x, y)和插入文本的地方xytext(x, y)。
#plt.legend()添加图例
plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
legend(loc=‘upper left‘)
plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
legend(loc=‘upper left‘)
#在matplotlib中,整个图像为一个Figure对象。在Figure对象中可以包含一个,或者多个Axes对象。每个Axes对象都 是一个拥有自己坐标系统的绘图区域。(axes[左, 下, 宽, 高] )
plt.axes([0.2, 0.6, .2, .2], axisbg=‘y‘)
plt.axes([0.2, 0.6, .2, .2], axisbg=‘y‘)
plt.grid(True) #格子
figure参数
参数 默认值 描述
num 1 图像的数量
figsize figure.figsize 图像的长和宽(英寸)
dpi figure.dpi 分辨率(点/英寸)
facecolor figure.facecolor 绘图区域的背景颜色
edgecolor figure.edgecolor 绘图区域边缘的颜色
frameon True 是否绘制图像边缘
num 1 图像的数量
figsize figure.figsize 图像的长和宽(英寸)
dpi figure.dpi 分辨率(点/英寸)
facecolor figure.facecolor 绘图区域的背景颜色
edgecolor figure.edgecolor 绘图区域边缘的颜色
frameon True 是否绘制图像边缘
二:自定义手绘画
from PIL import Image import numpy as np vec_el=np.pi/2.2 vec_az=np.pi/4 depth=10 im=Image.open(‘咩.jpg‘).convert(‘L‘) a=np.asarray(im).astype(‘float‘) grad=np.gradient(a) grad_x,grad_y=grad grad_x=grad_x*depth/100 grad_y=grad_y*depth/100 dx=np.cos(vec_el)*np.cos(vec_az) dy=np.cos(vec_el)*np.sin(vec_az) dz=np.sin(vec_el) A=np.sqrt(grad_x**2+grad_y**2+1.) uni_x=grad_x/A uni_y=grad_y/A uni_z=1./A a2=255*(dx*uni_x+dy*uni_y+dz*uni_z) a2=a2.clip(0,255) im2=Image.fromarray(a2.astype(‘unit8‘)) im2.save(‘咩.jpg‘)
三:python作业雷达图
import numpy as np import matplotlib.pyplot as plt import matplotlib labels = np.array([‘第一次‘,‘第二次‘,‘第三次‘,‘第四次‘,‘第五次‘,‘第六次‘]) dataLenth = 6 data = np.array([9,10,9,10,9,10]) 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(111, polar=True) ax.plot(angles, data, ‘ro-‘, linewidth=2) ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei") ax.set_title("简笺的成绩表", va=‘bottom‘, fontproperties="SimHei") ax.grid(True) plt.show()
四:科学计算
#coding=gbk
import math
import matplotlib.pyplot as plt
import numpy as np
if __name__=="__main__":
x = np.arange(0.05, 3, 0.05)
y1 = [math.log(a, 1.5) for a in x]
plt.plot(x, y1, linewidth=2, color=‘#007500‘, label=‘log1.5(x)‘)
plt.plot([1, 1], [y1[0], y1[-1]], "r--", linewidth=2)
y2 = [math.log(a, 2) for a in x]
plt.plot(x, y2, linewidth=2, color=‘#9F35FF‘, label=‘log2(x)‘)
y3 = [math.log(a, 3) for a in x]
plt.plot(x, y3, linewidth=2, color=‘#F75000‘, label=‘log3(x)‘)
plt.legend(loc=4)
plt.grid(True)
plt.show()
原文:https://www.cnblogs.com/wjaihui/p/10742099.html
评论(0)