一、函数Functions
- 定义一个函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。使用class语句来创建一个新类,class之后为类的名称并以冒号结尾。
三、Numpy
Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。
1.数组
一个numpy数组是一个由不同数值组成的网格。网格中的数据都是同一种数据类型,可以通过非负整型数的元组来访问。维度的数量被称为数组的阶,数组的大小是一个由整型数构成的元组,可以描述数组不同维度上的大小
- 定义数组
- shape和dtype方法查看数组的维度和数据格式
- shape()函数:对于一个二维数组 set = array([[1, 2], [3, 4], [5, 6], [7, 9]]);求数组的行数 set.shape[0];求数组的列数 set.shape[1]
- np.arange(n) ; 元素从0到n-1的ndarray类型
- numpy函数
- zeros()函数:创建的数组默认是浮点型的,可以使用第二参数设置数组的类型
- np.zeros((shape), ddtype = np.int32) : 生成int32型的全0
- eye()函数:创建单位矩阵
- np.arange(n) ; 元素从0到n-1的ndarray类型
- np.ones(shape): 生成全1
- np.full(shape, val): 生成全为val
2.访问数组
- 切片:和Python列表类似,numpy数组可以使用切片语法。因为数组可以是多维的,所以必须为每个维度指定好切片。
- 可以同时使用整型和切片语法来访问数组。但是,这样做会产生一个比原数组低阶的新数组。2.整型数组访问
使用切片语法访问数组时,得到的总是原数组的一个子集。整型数组访问允许利用其它数组的数据构建一个新的数组
print a[[0, 1, 2], [0, 1, 0]]等价于print np.array([a[0, 0], a[1, 1], a[2, 0]])
选择或者更改矩阵中每行中的一个元素
print a[np.arange(4), b] 等价于print a[[0,1,2,3],[0,2,0,1]]
3.布尔型数组访问
布尔型数组访问可以让你选择数组中任意元素。通常,这种访问方式用于选取数组中满足某些条件的元素
4.数据类型
每个Numpy数组都是数据类型相同的元素组成的网格。
5.数组计算
基本数学计算函数会对数组中元素逐个进行计算,既可以利用操作符重载,也可以使用函数方式.在Numpy中*是元素逐个相乘,使用dot来进行矩阵乘法
add(+) //加法
subtract (-)//减法
multiply (*) //乘法
divide (/) //除法
sqrt //平方根
x.T //转置
6.广播Broadcasting
广播用以描述numpy中对两个形状不同的阵列进行数学计算的处理机制。较小的阵列“广播”到较大阵列相同的形状尺度上,使它们对等以可以进行数学计算。广播提供了一种向量化阵列的操作方式,因此Python不需要像C一样循环。广播操作不需要数据复制,通常执行效率非常高。然而,有时广播是个坏主意,可能会导致内存浪费以致计算减慢。
对两个数组使用广播机制要遵守下列规则:
- 如果数组的秩不同,使用1来将秩较小的数组进行扩展,直到两个数组的尺寸的长度都一样。
- 如果两个数组在某个维度上的长度是一样的,或者其中一个数组在该维度上长度为1,那么我们就说这两个数组在该维度上是相容的。
- 如果两个数组在所有维度上都是相容的,他们就能使用广播。
- 如果两个输入数组的尺寸不同,那么注意其中较大的那个尺寸。因为广播之后,两个数组的尺寸将和那个较大的尺寸一样。
- 在任何一个维度上,如果一个数组的长度为1,另一个数组长度大于1,那么在该维度上,就好像是对第一个数组进行了复制。