Python包——Numpy用法速查
数组
最基本的numpy元素,矩阵就相当于二维的数组。
数组属性
较为有用的属性如下:
shape
:一个元组,需要第几维的大小需要取出。一维的也需要。size
:数组大小\(行\times 列\)。dtype
:数组的类型。可以是int、float、complex、bool。- 实际上numpy 支持的数据类型比 Python 内置的类型要多很多,大部分和C语言里面的对应,这里不一一说明。
ndim
:数组的维度,矩阵就是二维,向量就是一维。
构造numpy数组
注意:一下所有的_shape_如果是一个整数那就是一维。
np.empty(shape, dtype)
:构造空的数组,shape应该是一个元组;dtype可选,是数组的类型。np.zeros(shape, dtype)
:同上。np.ones(shape, dtype)
:同上。np.asarray(a, dtype)
:a是任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组。dtype同上。np.array(a, dtype)
:同上。numpy.arange(start, stop, step, dtype)
:根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。
数组方法
注意:以下用array
来代表numpy数组
array.reshape(n1, n2, ..., order)
:表示重新构造数组的维度,有多少个参数就构造多少维,但注意\(array.size = n_1 \times n_2 \times...\)order
:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺序。
array.flat
:以行遍历迭代数组里所有的元素。array.flatten(order)
:返回一份深拷贝。order
同上。array.T
:数组的转置。
数组切片/索引
数组的切片用于访问某个元素,或者是取用数组的部分内容。切片和list一样。
1 | import numpy as np |
逗号数和维度有关,不同的维度之间用逗号隔开。
布尔索引
带有逻辑操作的索引
1 | import numpy as np |
对数组数据处理
非数学处理
判断
np.isnan(array)
:返回布尔数组,有nan的地方就是True,其余为False。np.iscomplex(array)
:效果与上类似,判断复数的。
遍历
np.nditer(array, op_flags, flags, order)
:迭代数组,任何维都可以。返回一个迭代对象。order
:字符串,遍历顺序:'F'遍历列,'C'遍历行。op_flags
:字符串数组,表示读写权限。可以为__readwrite、writeonly__。flags
:字符串数组,一些常用的操作。常用有'external_loop',给出的值是具有多个值的一维数组,而不是零维数组。
1
2
3
4
5
6import numpy as np
a = np.arange(0,60,5).reshape(3, 4)
for x in np.nditer(a, flags=['external_loop'], order='F'):
print(x, end=", ")
# 结果是[ 0 20 40], [ 5 25 45], [10 30 50], [15 35 55],
数学处理
np.transpose(array, axes)
:更强大的转置,可以支持多维。axes
整数元组,对应维度。1
2
3
4
5import numpy as np
a = np.arange(18).reshape(2, 3, 3)
print(a)
print(np.transpose(a, axes=(0, 2, 1))) # 第2维和第3维转置后的数组np.expand_dims(array, axis)
:升维,axis
用关键字给实参,是整数,表示要扩展第几维,从0开始,不可以跳维升级。np.squeeze(array, axis)
:降维,axis
同上。维度必须是0才能降。
数组扩展
np.concatenate((array1, array2), axis)
:扩展数组,array1、array2
为相同维度的数组。axis
规范同上,表示沿着哪个维度进行拓展。注意:拓展方向的大小要一致。np.insert(arr, obj, values, axis)
:沿指定轴在对应位置插入数组,返回一个插入后的新数组。obj
在其之前插入值的索引。values
要插入的值,要和对应维度大小相同。axis
:指定维度。
Numpy数学
numpy独自提供了一套数学属性和方法,可以不用引入math包
特殊值
np.pi
:π
三角函数
都是接纳数组返回对应数组的。入参都是数组。
np.cos()、np.sin()、np.tan()、np.arccos()、np.arcsin()、np.arctan()
np.degrees()
:弧度转角度的。角度转弧度直接除以\(2π\)。
位数处理
np.around(a,decimals)
:a是数组;decimals舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置。np.floor(a)
:向下取整。np.ceil()
:向上取整。
算术计算
数组必须具有相同的形状或符合数组广播规则。
可以暂时理解为所有数组元素的对应运算。
np.add(a1, a2)、np.substract(a1, a2)、np.multiply(a1, a2)、np.divide(a1, a2)
:加减乘除。可以用+、-、*、/
来代替。np.power(a)、np.mod(a)
:取模和乘方,可以用%、**
代替。np.reciprocal(a)
:求倒数。
统计方法
Numpy线性代数
矩阵库
Numpy中的矩阵就是二维的数组。有些构造可以用reshape
来完成,所以有些构造不过多赘述。
Numpy中的矩阵操作要import numpy.matlib
。
构造矩阵特殊
eye(n, M,k, dtype)
:对角线矩阵。n: 返回矩阵的行数;M: 返回矩阵的列数,默认为 n;k: 对角线的起始索引;dtype: 数据类型。rand(m, n)
:创建一个给定大小\(m\times n\)的矩阵,数据是随机填充的。
线代运算函数
这里只介绍他们的基本用法。
np.dot(a, b)
:如果a,b是向量,就是內积;如果a,b是矩阵,就是矩阵积。np.vdot(a, b)
:数组展开计算內积。多维的展开成一维的计算內积。np.inner(a, b)
:向量a,b的內积计算。np.matmul(a, b)
:矩阵积。np.linalg.det(a)
:计算a的內积。np.linalg.solve(a)
:给出a矩阵形式的线性方程的解。np.linalg.inv(a)
:计算a的逆矩阵。a必须为方阵。
matplotlib
他是python的绘图库,可与numpy一起使用。也可以和图形工具包一起使用,如PyQt和wxPython。
线性平面图
1 | import matplotlib.pyplot as plt |