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种点形状:
"."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

# 创建一个 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
   xlim(xmin - dx, xmax + dx)
   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),)

#用来注释图中的一些特征,要考虑两个点的坐标:被注释的地方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‘)
#在matplotlib中,整个图像为一个Figure对象。在Figure对象中可以包含一个,或者多个Axes对象。每个Axes对象都   是一个拥有自己坐标系统的绘图区域。(axes[左, 下, 宽, 高] )
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                          是否绘制图像边缘
二:自定义手绘画
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
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!