numpy

点点圈 提交于 2021-01-06 22:50:50

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) 创建一个34且初始化为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)) 创建一个33的,在0-1之间均匀分布的随机数组 np.random.normal(0,1,(3,3)) 创建一个33的,均值为0,方差为1的正态分布随机数组 np.random.randint(0,10,(3,3)) [0,10)之间的33随机整数数组 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维数组的逆。 上述数学函数的总结基本都摘录自

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!