numpy

To be continue

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

引入文件

import numpy as np

ndarray
一种多维数组对象

创建array

  1. 从python列表创建
    array所有的数据类型都是相同的。如果传入了拥有不同类型元素的列表,array会尝试自动转换

    datal = np.array([1,3,4,2])

    也可以传入多维列表

    datal2 = np.array([[1,2,3,4],[3,4,5,6]])

  1. 通过函数创建数组
    该方法比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维数组的逆。

上述数学函数的总结基本都摘录自https://blog.csdn.net/junchengberry/article/details/80349574

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,102评论 0 18
  • 数学函数 三角函数 sin(x, /[, out, where, casting, order, …]) 逐个元素...
    无赖宵小阅读 997评论 0 0
  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想从新回忆下,请看看Python Tutoria...
    舒map阅读 2,561评论 1 13
  • NumPy是Python中关于科学计算的一个类库,在这里简单介绍一下。 来源:https://docs.scipy...
    灰太狼_black阅读 1,220评论 0 5
  • 前言 numpy是支持 Python语言的数值计算扩充库,其拥有强大的高维度数组处理与矩阵运算能力。除此之外,nu...
    TensorFlow开发者阅读 3,189评论 0 35