To be continue
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
引入文件
import numpy as np
ndarray
一种多维数组对象
创建array
-
从python列表创建
array所有的数据类型都是相同的。如果传入了拥有不同类型元素的列表,array会尝试自动转换datal = np.array([1,3,4,2])
也可以传入多维列表
datal2 = np.array([[1,2,3,4],[3,4,5,6]])
- 通过函数创建数组
该方法比python列表创建速度快
函数 | 作用 |
---|---|
np.zeros(10,dtype=int) | 创建值为0数据类型为int |
np.ones((3,5),dtype=float) | 创建值为1数据类型为float |
np.empty((2,3,2)) | 创建空数组时,只是取出对应的内存大小,里面可能因内存残留而有其他数据 |
np.full((3,4),3.14) | 创建一个3*4且初始化为3.14的数组 |
np.arange(0,20,2) | 从0到20,步长为2 |
np.linspace(0,1,5) | 从0到1均匀生成5个数(即,0,0.25,0.5,0.75,1) |
np.eye(num) | 创建单位矩阵 |
np.random.random((3,3)) | 创建一个3*3的,在0-1之间均匀分布的随机数组 |
np.random.normal(0,1,(3,3)) | 创建一个3*3的,均值为0,方差为1的正态分布随机数组 |
np.random.randint(0,10,(3,3)) | [0,10)之间的3*3随机整数数组 |
np.random.seed() | 随机数种子 |
numpy数据类型
Data type | Description |
---|---|
bool_ | Boolean (True or False) stored as a byte |
int_ | Default integer type (same as C long; normally either int64 or int32) |
intc | Identical to C int (normally int32 or int64) |
intp | Integer used for indexing (same as C ssize_t; normally either int32 or int64) |
int8 | Byte (-128 to 127) |
int16 | Integer (-32768 to 32767) |
int32 | Integer (-2147483648 to 2147483647) |
int64 | Integer (-9223372036854775808 to 9223372036854775807) |
uint8 | Unsigned integer (0 to 255) |
uint16 | Unsigned integer (0 to 65535) |
uint32 | Unsigned integer (0 to 4294967295) |
uint64 | Unsigned integer (0 to 18446744073709551615) |
float_ | Shorthand for float64. |
float16 | Half precision float: sign bit, 5 bits exponent, 10 bits mantissa |
float32 | Single precision float: sign bit, 8 bits exponent, 23 bits mantissa |
float64 | Double precision float: sign bit, 11 bits exponent, 52 bits mantissa |
complex_ | Shorthand for complex128. |
complex64 | Complex number, represented by two 32-bit floats |
complex128 | Complex number, represented by two 64-bit floats |
字符 | 对应类型 |
---|---|
b | 布尔型 |
i | (有符号) 整型 |
u | 无符号整型 integer |
f | 浮点型 |
c | 复数浮点型 |
m | timedelta(时间间隔) |
M | datetime(日期时间) |
O | (Python) 对象 |
S, a | (byte-)字符串 |
U | Unicode |
V | 原始数据 (void) |
数据类型转换
astype('数据类型')
不修改原数组,只会返回一个数组的拷贝,
浮点数转换为整数,会截断小数部分
字符串只能先转换为浮点数,不能直接转换为整数
数组属性及方法
属性
ndim 数组维度
shape 返回一个各维度大小的元组
size 元素总数
dtype 返回该数组的数据类型
itemsize 每个元素占内存大小
nbytes 整个数组占用内存-
方法
copy() -- 可创建数组的副本
reshape() -- 重新调整矩阵的行数、列数、维数,返回一个新的数组。与原数组公用内存np.newaxis -- 在当前位置增加一个一维,如:x1[np.newaxis,:]表示增加一行
np.concatenate() -- 可一次拼接两个及以上数组
- (a1, a2, …):要拼接的数组
- axis=0:沿着哪个维度进行拼接,默认为0,横向切分。为1时,纵向切分
np.vstack() -- 垂直栈,在第一维(行)拼接
np.hstack() -- 水平栈,在第二维(列)拼接np.split() -- 把一个数组从左到右按顺序切分
- ary:要切分的数组
- indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)
- axis=0:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分
np.vsplit() -- 垂直切分
np.hsplit() -- 水平切分
索引、切片
索引
可使用python常用的方法
除此外,还可用逗号分隔的索引元组获取元素
num[0,0] == num[0][0]
- 布尔型索引
支持常用逻辑运算符,可用原数组对比较后的结果进行选择,返回值为True的数;可进行运算,True为1,False为0
逻辑运算符 | numpy函数 |
---|---|
> | np.greater |
< | np.less |
== | np.equal |
!= | np.notequal |
<= | np.less_equal |
>= | np.greater_equal |
-
花式索引
对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行。
又称花哨索引,其意义是根据索引数组的值作为目标数组的某个轴的下标来取值。
对于使用两个整型数组作为索引的时候,那么结果是按照顺序取出对应轴的对应下标的值。例如,以[0,1],[2,0]这两个整型数组作为索引,那么对于二维数组,则取出(0,1),(2,0)这些坐标对应的元素。
切片
可使用python常用的方法
基本语法仍为:num[start:stop:step]
对于多维数组,在同一个[]内以逗号分隔切片的维度,例如:
num[:2,:3] ---- 选取前两行前三列
选取后产生的是原数组的视图,而不是数据的副本
调用copy()函数可以新建副本
常用数组方法
1 | 2 |
---|---|
np.sort() | 排序,返回原数据的副本 |
np.argsort() | 返回排序后的下标 |
numpy.lexsort((b,a)) | 借助b对a排序,返回a下标,当a某两位相同时看对应位置的b大小 |
numpy.searchsorted() | 寻找某个数应该插在数组的什么位置上,这个数组必须是按序排列的 |
num.sort() | 就地排序,影响原数组 |
np.partation() | 把k-th大小的元素放在k-th的位置,小于的数字放在左边,大于的放在右边 |
sorted() | 可以对所有可迭代的对象进行排序操作。 |
数学函数
三角函数
numpy.sin(x):三角正弦。
numpy.cos(x):三角余弦。
numpy.tan(x):三角正切。
numpy.arcsin(x):三角反正弦。
numpy.arccos(x):三角反余弦。
numpy.arctan(x):三角反正切。
numpy.hypot(x1,x2):直角三角形求斜边。
numpy.degrees(x):弧度转换为度。
numpy.radians(x):度转换为弧度。
numpy.deg2rad(x):度转换为弧度。
numpy.rad2deg(x):弧度转换为度。双曲函数
numpy.sinh(x):双曲正弦。
numpy.cosh(x):双曲余弦。
numpy.tanh(x):双曲正切。
numpy.arcsinh(x):反双曲正弦。
numpy.arccosh(x):反双曲余弦。
numpy.arctanh(x):反双曲正切。数值修约
数值修约, 又称数字修约, 是指在进行具体的数字运算前, 按照一定的规则确定一致的位数, 然后舍去某些数字后面多余的尾数的过程
numpy.around(a):平均到给定的小数位数。
numpy.round_(a):将数组舍入到给定的小数位数。
numpy.rint(x):修约到最接近的整数。
numpy.fix(x, y):向 0 舍入到最接近的整数。
numpy.floor(x):返回输入的底部(标量 x 的底部是最大的整数 i)。
numpy.ceil(x):返回输入的上限(标量 x 的底部是最小的整数 i).
numpy.trunc(x):返回输入的截断值。求和、求积、差分
numpy.sum(a, axis, dtype, keepdims):返回指定轴上的数组元素的总和。
numpy.prod(a, axis, dtype, keepdims):返回指定轴上的数组元素的乘积。
numpy.nanprod(a, axis, dtype, keepdims):返回指定轴上的数组元素的乘积, 将 NaN 视作 1。
numpy.nansum(a, axis, dtype, keepdims):返回指定轴上的数组元素的总和, 将 NaN 视作 0。
numpy.cumprod(a, axis, dtype):返回沿给定轴的元素的累积乘积。
numpy.cumsum(a, axis, dtype):返回沿给定轴的元素的累积总和。
numpy.nancumprod(a, axis, dtype):返回沿给定轴的元素的累积乘积, 将 NaN 视作 1。
numpy.nancumsum(a, axis, dtype):返回沿给定轴的元素的累积总和, 将 NaN 视作 0。
numpy.diff(a, n, axis):计算沿指定轴的第 n 个离散差分。
numpy.ediff1d(ary, to_end, to_begin):数组的连续元素之间的差异。
numpy.gradient(f):返回 N 维数组的梯度。
numpy.cross(a, b, axisa, axisb, axisc, axis):返回两个(数组)向量的叉积。
numpy.trapz(y, x, dx, axis):使用复合梯形规则沿给定轴积分。指数、对数
numpy.exp(x):计算输入数组中所有元素的指数。
numpy.expm1(x):对数组中的所有元素计算 exp(x) - 1.
numpy.exp2(x):对于输入数组中的所有 p, 计算 2 ** p。
numpy.log(x):计算自然对数。
numpy.log10(x):计算常用对数。
numpy.log2(x):计算二进制对数。
numpy.log1p(x):log(1 + x)。
numpy.logaddexp(x1, x2):log2(2x1 + 2x2)。
numpy.logaddexp2(x1, x2):log(exp(x1) + exp(x2))。算术运算
numpy.negative(x):求对应负数。
numpy.add(x1, x2):加。
numpy.subtract(x1, x2):减。
numpy.multiply(x1, x2):乘。
numpy.divide(x1, x2):除。
numpy.reciprocal(x):求倒数 1/x。
numpy.power(x1, x2):类似于 x1^x2。
numpy.fmod(x1, x2):返回除法的元素余项。
numpy.mod(x1, x2):返回余项。
numpy.modf(x1):返回数组的小数和整数部分。
numpy.remainder(x1, x2):返回除法余数。点积
numpy.dot(a,b):求解两个数组的点积。
numpy.vdot(a,b):求解两个向量的点积。
numpy.inner(a,b):求解两个数组的内积。
numpy.outer(a,b):求解两个向量的外积。
numpy.matmul(a,b):求解两个数组的矩阵乘积。
numpy.tensordot(a,b):求解张量点积。
numpy.kron(a,b):计算 Kronecker 乘积。聚合、统计
numpy.mean:平均数
numpy.median:中位数
numpy.var:方差
numpy.std:标准差
numpy.max:最大值
numpy.min:最小值
numpy.argmax:最大值索引
numpy.argmin:最小值索引
numpy.percentile:计算基于元素排序的统计值
numpy.any:验证是否有元素为真
numpy.all:验证是否所有元素均为真其他
numpy.angle(z, deg):返回复参数的角度。
numpy.real(val):返回数组元素的实部。
numpy.imag(val):返回数组元素的虚部。
numpy.conj(x):按元素方式返回共轭复数。
numpy.convolve(a, v, mode):返回线性卷积。
numpy.sqrt(x):平方根。
numpy.cbrt(x):立方根。
numpy.square(x):平方。
numpy.absolute(x):绝对值, 可求解复数。
numpy.fabs(x):绝对值。
numpy.sign(x):符号函数。
numpy.maximum(x1, x2):两数组各个对应位置最大值。
numpy.minimum(x1, x2):两数组各个对应位置最小值。
numpy.nan_to_num(x):用 0 替换 NaN。
numpy.interp(x, xp, fp, left, right, period):线性插值。
-
矩阵运算
numpy.linalg.cholesky(a):Cholesky 分解。
numpy.linalg.qr(a ,mode):计算矩阵的 QR 因式分解。
numpy.linalg.svd(a ,full_matrices,compute_uv):奇异值分解。
numpy.linalg.eig(a):计算正方形数组的特征值和右特征向量。
numpy.linalg.eigh(a, UPLO):返回 Hermitian 或对称矩阵的特征值和特征向量。
numpy.linalg.eigvals(a):计算矩阵的特征值。
numpy.linalg.eigvalsh(a, UPLO):计算 Hermitian 或真实对称矩阵的特征值。
numpy.linalg.norm(x ,ord,axis,keepdims):计算矩阵或向量范数。
numpy.linalg.cond(x ,p):计算矩阵的条件数。
numpy.linalg.det(a):计算数组的行列式。
numpy.linalg.matrix_rank(M ,tol):使用奇异值分解方法返回秩。
numpy.linalg.slogdet(a):计算数组的行列式的符号和自然对数。
numpy.trace(a ,offset,axis1,axis2,dtype,out):沿数组的对角线返回总和。
numpy.linalg.solve(a,b):求解线性矩阵方程或线性标量方程组。
numpy.linalg.tensorsolve(a,b ,axes):为 x 解出张量方程a x = b
numpy.linalg.lstsq(a,b ,rcond):将最小二乘解返回到线性矩阵方程。
numpy.linalg.inv(a):计算逆矩阵。
numpy.linalg.pinv(a ,rcond):计算矩阵的(Moore-Penrose)伪逆。
numpy.linalg.tensorinv(a ,ind):计算N维数组的逆。