python3 学习笔记

来源:互联网 发布:图片墙制作软件 编辑:程序博客网 时间:2024/05/17 02:27

11月份

注意:Theano和TensorFlow的维度表示含义是不一样的。

'th'模式,也即Theano模式会把100张RGB三通道的16×32(高为16宽为32)彩色图表示为下面这种形式(100,3,16,32),Caffe采取的也是这种方式。第0个维度是样本维,代表样本的数目,第1个维度是通道维,代表颜色通道数。后面两个就是高和宽了。而TensorFlow,即'tf'模式的表达形式是(100,16,32,3),即把通道维放在了最后。这两个表达方法本质上没有什么区别。



8月份

 scipy模块说明手册: https://www.scipy.org

学习来源:https://www.shiyanlou.com/courses/596

https://www.shiyanlou.com/courses/348

08/22

python的数组是从 0 开始计数。使用负数会从列表末尾开始计数。

a=[0,1,2,3,4]    a[0:-2]=[0,1,2]

保留小数点后10位,计算半径为2的圆面积

import math

r=2

area=math.pi*r*r

print('%.10f'%float(area))


a,b=b,a #交换a b

print("a={:2d},b={:6.10f}".format(a,b))  # a 是整数。b保留小数点后10位


务必要使用正确的缩进,在表达式为真的情况将会执行缩进的所有行。break终止最里面的循环

a=int(input("Please input the number"))

if a>100: #记住有 : 

    print(">100")

else  #elif 是else if 的缩写

    print("<=100")


print(b) #默认输出b时换行

print(b,end='    ') #输出b后 ,空格

print("#"*10)  即输出

##########


range()函数

list(range(1,5))  # 1,2,3,4

list(rang(2,15,3)) # 2,5,8,11,14 等差数列

list(range(5)) # 0,1,2,3,4


08/23

数据结构

列表

a=[1,3,4,5,2]

a.append(8) #a=[1,3,4,5,2,8] 在列表末尾添加元素

a.insert(0,5) #a=[5,1,3,4,5,2,8] 在列表索引0位置添加元素

a.count(5) # 2 返回列表元素中5的数量

a.remove(1) # a=[5,3,4,5,2,8] 移除指定值1

a.reverse() # a=[8,2,5,4,3,5] 反转整个列表

b=[0,0]

a.extend(b) # a=[8,2,5,4,3,5,0,0] 将b所有元素添加到a末尾

a.sort() # a=[0,0,2,3,4,5,5,8] 排序

del a[-1] # a=[0,0,2,3,4,5,5] 删除指定元素

a.pop() #  5  此时a=[0,0,2,3,4,5] 。后进先出,作栈

a.pop(0) #  0  此时a=[0,2,3,4,5] 。先进先出,作栈


x**2 #即x的平方

squares=[x**2 for x in range(10)] # squares=[0,1,4,9,16,25,36,49,64,81] 列表推导式,也可以嵌套

[(x,y) for x in [1,2,3] for y in [3,1,4] if x != y] # [(1,3),(1,4),(2,3),(2,1),(2,4),(3,1),(3,4)]

z=[x+1 for x in [x **2 for x in [1,2,3]]] # z=[2,5,10]


元组

a=(1,2,3) #type(a) 元组’tuple’是不可变型,不能删除,不能添加,不能编辑


集合无序不重复元素的集,bb={’s’,’a’}。set()创建集合,也可创建空集。

差-

 并| 

交& 

对称交集^(存在于a或b但不同时存在) 


字典,无序的键值对集合 key:value。同一字典内键互不相同。{}创建空字典

a[key]=value 创建新的键

del 删除指定的键值对

in 查询指定的键是否在字典中

dict() 可以从包含键值对的元组中创建字典。

a.items() 遍历一个字典

a.setdefault(key,default) 往字典中的元素添加数据,我们首先要判断这个元素是否存在,不存在则创建一个默认值。

a.get(key,default) 索引键

enumerate() 在遍历列表(或任何序列类型)的同时获得元素索引值

zip() 同时遍历两个序列类型


set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

list() 方法用于将元组转换为列表。注:元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中。

len() 方法返回对象(字符、列表、元组等)长度或项目个数。



字符串

想要分几行输入字符串,并且希望行尾的换行符自动包含到字符串当中,可以使用三对引号:"""...""" '''...'''

a=“ha ha”

a.title() # ‘Ha Ha’ 返回字符串的标题版本,即单词首字母大写其余字母小写。

a.upper() #’HA HA’upper()返回字符串全部大写的版本,反之 lower()返回字符串的全部小写版本。

swapcase() 返回字符串大小写交换后的版本 

isalnum() 检查所有字符是否为字母数字。如:字符串中包含空格字符,则返回 False

isalpha() 检查字符串之中是否只有字母。

isdigit() 检查字符串之中是否所有字符为数字。

islower() 检查字符串之中是否所有字符为小写。

isupper() 检查字符串之中是否所有字符为大写。

istitle() 检查字符串是否为标题样式

a.split() 分割字符串,默认为空格。a.split(:) 以:分割

“-”.join(“I am good”.split()) # I-am-good 。join()使用指定字符连接多个字符串,它需要一个包含字符串元素的列表作为输入然后连接列表内的字符串元素。


字符串剥离。最简单的一个是 strip(chars),用来剥离字符串首尾中指定的字符,它允许有一个字符串参数,这个参数为剥离哪些字符提供依据。不指定参数则默认剥离掉首尾的空格和换行符。

lstrip(chars) rstrip(chars)只对字符串左或右剥离。


find() 能帮助你找到第一个匹配的子字符串,没有找到则返回 -1

startswith(“fa”) #检查字符串是否以fa开头

endswith(“ha”) #检查字符串是否以ha结尾

s=“happy”

z=s[::-1] # z=“yppah”

len(a.split()) #计算单词个数


#找字符串中的数字,并打印出来['1', '2', '6', '7']

file="abs 1 2 de 6 7 fr"

c=file.split()

a=[]

L=len(file.split())

for x in range(L):

    b=c[x]

    if b.isdigit() == True :

        a.append(b)

print(a)


file="abs 1 2 de 6 7 fr"

a=[]

for x in file:

    if x.isdigit() == True :

        a.append(x)

print(a)


global a#全局变量 a


#函数在后续调用过程中会累积(前面)传给它的参数:

def f(a, data=[]): 

    data.append(a)

    return data

#要避免这个问题

def f(a, data=None): 

    if data is None:

         data = []

    data.append(a)

    return data


默认参数

关键字参数

强制关键字参数:将函数的参数标记为只允许使用关键字参数。用户调用函数时将只能对每一个参数使用相应的关键字参数。


高阶函数

map() 函数,它接受一个函数和一个序列(迭代器)作为输入,然后对序列(迭代器)的每一个值应用这个函数,返回一个序列(迭代器),其包含应用函数后的结果。

a=[1,2,3]

def square(num)

    return num*num

print(list(map(square,a))) # [1,4,9]


文件处理

f=open(“*.txt”)

f.close()

f.read()

f.readline() 每次读取文件的一行。

f.readlines() 方法读取所有行到一个列表中。


文件写入

f=open(“*.txt”,’w’)

f.write(‘haha\n’)


import sys #  新模块

sys.argv #包含所有命令行参数

enumerate(a) #在序列中循环时,索引位置和对应值可以使用它同时得到。


with 语句处理文件对象,它会在文件用完后会自动关闭,就算发生异常也没关系。with语句是 try-finally块的简写。

with open(’*.txt’) as a :


try...except 块来处理任意异常

使用 raise 语句抛出一个异常。

try 语句还有另一个可选的 finally子句,目的在于定义在任何情况下都一定要执行的功能。在真实场景的应用程序中,finally子句用于释放外部资源(文件或网络连接之类的),无论它们的使用过程中是否出错。


输入分钟数,输出小时分。如果输入是负数则报错。

def Hours():

    min=int(input())

    if min>=0:

        hour=min//60

        minutes=min%60

        print(“{:2d} H,{:2d} M”.format(hour,minutes))

    else:

        raise ValueError


while True:

    try:

        Hours()

    except ValueError :

        print(“ValueError: input number cannot be negative”)


__init__()方法可以有参数。事实上,参数通过__init__()传递到的实例化操作上。

继承

多继承

删除对象 del

class Student(object):

    def _init_(self,name):

        self.name = name


std=Student(“KUKU”)

print(std.name)  # KUKU

std.name = “PY”

print(std.name)  # PY


print(std.name)  # 


@property 装饰器就是负责把一个方法变成属性调用的。


模块

模块是包括 Python 定义和声明的文件。文件名就是模块名加上 .py后缀。

可以由全局变量 __name__ 得到模块的模块名(一个字符串)。

import   math #启动解释器然后导入我们的模块

math.e #必须使用模块名来访问模块内的函数


含有 __init__.py 文件的目录可以用来作为一个包,目录里的所有 .py文件都是这个包的子模块


os模块提供了与操作系统相关的功能。


if __name__ == '__main__':这条语句,它的作用是,只有在当前模块名为 __main__的时候(即作为脚本执行的时候)才会执行此 if块内的语句。换句话说,当此文件以模块的形式导入到其它文件中时,if块内的语句并不会执行。


Collections 模块。这个模块实现了一些很好的数据结构。

Counter 是一个有助于hashable对象计数的 dict子类。它是一个无序的集合,其中hashable对象的元素存储为字典的键,它们的计数存储为字典的值,计数可以为任意整数,包括零和负数。

defaultdict 是内建 dict类的子类,它覆写了一个方法并添加了一个可写的实例变量。其余功能与字典相同。defaultdict()第一个参数提供了 default_factory属性的初始值,默认值为 Nonedefault_factory属性值将作为字典的默认数据类型。所有剩余的参数与字典的构造方法相同,包括关键字参数。同样的功能使用 defaultdict比使用 dict.setdefault方法快。

namedtuple 命名元组有助于对元组每个位置赋予意义,并且让我们的代码有更好的可读性和自文档性。你可以在任何使用元组地方使用命名元组。在例子中我们会创建一个命名元组以展示为元组每个位置保存信息。


numpy多维数组

SciPy库建立在 Numpy库之上,提供了大量科学算法,主要包括这些主题:

  • 特殊函数 (scipy.special)
  • 积分 (scipy.integrate)
  • 最优化 (scipy.optimize)
  • 插值 (scipy.interpolate)
  • 傅立叶变换 (scipy.fftpack)
  • 信号处理 (scipy.signal)
  • 线性代数 (scipy.linalg)
  • 稀疏特征值 (scipy.sparse)
  • 统计 (scipy.stats)
  • 多维图像处理 (scipy.ndimage)
  • 文件 IO (scipy.io)
  • 2.2 积分
    • 2.2.1 数值积分: 求积
  • 2.3 常微分方程 (ODEs)
    • 示例: 双摆
    • 示例:阻尼谐震子
  • 2.4 傅立叶变换
  • 2.5 线性代数

from scipy.linalg import *

from numpy.random import *

    • 2.5.1 线性方程组

solve() #Ax=b, 求解x

dot(A,x) #  Ax

    • 2.5.2 特征值 特征向量

eigvals 计算矩阵的特征值,使用 eig同时计算矩阵的特征值与特征向量:

    • 2.5.3 矩阵运算
    • 2.5.4 稀疏矩阵

from scipy.sparse import *

todense()

  • 2.6 最优化

from scipy import optimize

    • 2.6.1 找到一个最小值

fmin_bfgs 找到函数的最小值

也可以使用 brent 或者 fminbound函数,区别就是一点语法和实现所用的算法。

    • 2.6.2 找到方程的解

fsolve。它需要一个初始的猜测值

  • 2.7 插值

from scipy.interpolate import *

  • 2.8 统计学

from scipy import stats

    • 2.8.1 统计检验
matplotlib
  • 2.1 MATLAB API

from pylab import *

show()

    • MATLAB API 绘图示例
  • 2.2 matplotlib 面向对象 API

import matplotlib.pyplot as plt

调用 fig 实例的 add_axes 方法:

from numpy import *

import matplotlib.pyplot as plt

x = linspace(0, 5, 10)

y = x ** 2

fig = plt.figure()


axes = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # left, bottom, width, height (range 0 to 1)


axes.plot(x, y, 'r')


axes.set_xlabel('x')

axes.set_ylabel('y')

axes.set_title('title')


fig

plt.show()

如果我们不在意坐标轴在图中的排放位置️,那么就可以使用matplotlib的布局管理器了,fig, axes = plt.subplots()

fig.tight_layout() 解决标签重叠问题,它会自动调整标签的位置


    • 2.2.1 图表尺寸,长宽比 DPI

使用figsize dpi 参数能够设置图表尺寸与DPI

fig = plt.figure(figsize=(8,4), dpi=100) #创建一个800*400像素,每英寸100像素的图

fig, axes = plt.subplots(figsize=(12,3))

    • 2.2.2 保存图表

fig.savefig("filename.png") 

fig.savefig("filename.png", dpi=200) #指定像素值

    • 有哪些格式?哪种格式能获得最佳质量?

科学论文建议尽量使用pdf格式。 (pdflatex编译的 LaTeX文档使用 includegraphics命令就能包含 PDF文件)一些情况下,PGF也是一个很好的选择。

    • 2.2.3 图例,轴标 标题

ax.set_title("title"); #每一个坐标轴实例都可以加上一个标题

ax.set_xlabel("x")

ax.set_ylabel(“y”);#轴标

ax.plot(x, x**2, label="curve1")

ax.plot(x, x**3, label="curve2")

ax.legend(loc=0); loc=1234加入图例

    • 2.2.4 格式化文本,LaTeX,字体大小,字体类型

Matplotlib LaTeX提供了很好的支持。我们只需要将 LaTeX表达式封装在 $ 符号内,就可以在图的任何文本中显示了,比如 "$y=x^3$"

LaTeX 中我们常常会用到反斜杠,比如 \alpha 来产生符号 $\alpha$ 只需要在字符串的前面加个r就行,如r'$\alpha$'

更改全局字体大小或者类型:将图中的文本全用 Latex渲染:

from matplotlib import rcParams

rcParams.update({'font.size': 18, 'text.usetex': True})

    • 2.2.5 设置颜色,线宽 线型
      • 颜色

MATLAB语法,'b'代表蓝色,'g'代表绿色,如 'b.-'意味着蓝线标着点

ax.plot(x, x**2, 'b.-') # blue line with dots

ax.plot(x, x**3, 'g--') # green dashed line


ax.plot(x, x+1, color="red", alpha=0.5) # half-transparant red

ax.plot(x, x+2, color="#1155dd")        # RGB hex code for a bluish color

ax.plot(x, x+3, color="#15cc55")        # RGB hex code for a greenish color


    • 线与描点风格

linewidth 或是 lw参数改变线宽。

linestyle 或是 ls参数改变线的风格。

    • 2.2.6 控制坐标轴的样式
      • 图的范围

使用 set_ylim 或是 set_xlim 方法或者 axis('tight')自动将坐标轴调整的紧凑

axes[1].axis('tight')

axes[2].set_ylim([0, 60])

axes[2].set_xlim([2, 5])

    • 对数刻度

也可以将轴的刻度设置成对数刻度,调用 set_xscale set_yscale设置刻度,参数选择 "log"

axes[1].set_yscale("log")

    • 2.2.7 自定义标号位置与符号

set_xticks set_yticks方法可以显示地设置标号的位置,

set_xticklabels set_yticklabels为每一个标号设置符号:

      • 科学计数法
    • 2.2.8轴上数与标签的间距

rcParams['xtick.major.pad'] = 5

rcParams['ytick.major.pad'] = 5

    • 调整坐标轴的位置:

fig.subplots_adjust(left=0.15, right=.9, bottom=0.1, top=0.9);

    • 2.2.9 坐标轴网格

grid 方法可以打开关闭网格线,也可以自定义网格的样式:

axes[0].grid(True)

axes[1].grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5)

    • 2.2.10

ax.spines['bottom'].set_color('blue')

    • 2.2.11 双坐标轴

twinx twiny 函数能设置双坐标轴:

ax2 = ax1.twinx()

    • 2.2.12 设置坐标原点在(00)点
    • 2.2.13 其他 2D 图表风格

包括一般的 plot 方法

这里列出其中几种比较常见的函数方法。

n = array([0,1,2,3,4,5])



fig, axes = plt.subplots(1, 4, figsize=(12,3))


axes[0].scatter(xx, xx + 0.25*randn(len(xx)))

axes[0].set_title("scatter")


axes[1].step(n, n**2, lw=2)

axes[1].set_title("step")


axes[2].bar(n, n**2, align="center", width=0.5, alpha=0.5)

axes[2].set_title("bar")


axes[3].fill_between(x, x**2, x**3, color="green", alpha=0.5);

axes[3].set_title("fill_between");


fig


# polar plot using add_axes and polar projection

fig = plt.figure()

ax = fig.add_axes([0.0, 0.0, .6, .6], polar=True)

t = linspace(0, 2 * pi, 100)

ax.plot(t, t, color='blue', lw=3);


# A histogram

n = np.random.randn(100000)

fig, axes = plt.subplots(1, 2, figsize=(12,4))


axes[0].hist(n)

axes[0].set_title("Default histogram")

axes[0].set_xlim((min(n), max(n)))


axes[1].hist(n, cumulative=True, bins=50)

axes[1].set_title("Cumulative detailed histogram")

axes[1].set_xlim((min(n), max(n)));


fig


    • 2.2.14 文本注释

text 函数可以做文本注释,且支持 LaTeX格式:

    • 2.2.15 带有多子图与插图的图

fig.add_axes 在图中加入新坐标轴

    • subplots
    • subplot2grid
    • gridspec

import matplotlib.gridspec as gridspec

      • add_axes
    • 2.2.16 颜色映射图与轮廓图
      • pcolor

fig, ax = plt.subplots()


p = ax.pcolor(X/(2*pi), Y/(2*pi), Z, cmap=plt.cm.RdBu, vmin=abs(Z).min(), vmax=abs(Z).max())

cb = fig.colorbar(p, ax=ax)


fig

    • imshow

fig, ax = plt.subplots()


im = ax.imshow(Z, cmap=cm.RdBu, vmin=abs(Z).min(), vmax=abs(Z).max(), extent=[0, 1, 0, 1])

im.set_interpolation('bilinear')


cb = fig.colorbar(im, ax=ax)


fig

    • contour

fig, ax = plt.subplots()


cnt = ax.contour(Z, cmap=cm.RdBu, vmin=abs(Z).min(), vmax=abs(Z).max(), extent=[0, 1, 0, 1])


fig


08/25
  • 2.3 3D

from mpl_toolkits.mplot3d.axes3d import Axes3D

    • 2.3.1 绘制曲面
    • 2.3.2 绘制线框
    • 2.3.3 绘制投影轮廓
    • 2.3.4 改变视图角度

view_init 可以改变视图角度,读取两个参数: elevation azimuth角度

  • 2.4 动画

FuncAnimation 函数能根据一系列图生成动画,它有以下参数:

fig:图的画布

func:更新图的函数

init_func:初始化图的函数

frame:图的数量

blit:告诉动画函数只更新改动的部分:

为了使用动画特性,首先加载模块 matplotlib.animation

from matplotlib import animation

  • 2.5 后端
    • 2.5.1 使用 svg 后端生成 svg 图片
    • 2.5.2 可交互后端

Python 有两个值得注意的计算机代数系统(CAS):

  • SymPy -可以被任何 python程序或者 IPython 会话使用,提供了强大的 CAS特性。
  • Sage - Sage是一个功能全面并且非常强大的 CAS环境,旨在提供一个相比较于 Mathematica Maple来说开源的环境。Sage 不是一个 Python模块,但是该环境将 python用作其编程语言。


为变量创建符号。:x = Symbol('x')

I Sympy中表示虚数单位。

r1 = Rational(4,5) # 4/5

数学常量的表达式,如 pi, e, 以及oo (代表极限)。为了计算表达式的数值,可以使用 evalf函数 (或者 N函数)n参数决定有效数位。

pi.evalf(n=50) 


diff 函数用来做微分:

integrate(f, x)

limit(sin(x)/x, x, 0)

series(exp(x), x) #数列展开

矩阵由 Matrix 类定义: