Numpy中的广播和数组运算

image

1、概述api

在Numpy中当数组进行运算时,若是两个数组的形状相同,那么两个数组相乘就是两个数组的对应位相乘,这是要求维数相乘,而且各维度的长度相同,可是当运算中两个数组的形状不一样使时,numpy将会自动触发广播机制,因此咱们要了解numpy的广播机制,才能更好的进行数组的运算。数组

2、Numpy中的广播ide

一、什么是广播函数

咱们都知道,Numpy中的基本运算(加、减、乘、除、求余等等)都是元素级别的,可是这仅仅局限于两个数组的形状相同的状况下。spa

但是你们又会发现,若是让一个数组加1的话,结果时整个数组的结果都会加1,这是什么状况呢?.net

image

image

image

image

image

image

其实这就是广播机制:Numpy 能够转换这些形状不一样的数组,使它们都具备相同的大小,而后再对它们进行运算。下面是广播示意图:3d

image

术语广播是指 NumPy 在算术运算期间处理不一样形状的数组的能力。对数组的算术运算一般在 相应的元素上进行。若是两个阵列具备彻底相同的形状,则这些操做被无缝执行。code

若是两个数组的维数不相同,则元素到元素的操做是不可能的。然而,在 NumPy 中仍然能够对形状不类似的数组进行操做,由于它拥有广播功能。较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。排序

若是知足如下条件之一,那么数组被称为可广播的。索引

  • 数组拥有相同形状。
  • 数组拥有相同的维数,且某一个或多个维度长度为 1 。
  • 数组拥有极少的维度,能够在其前面追加长度为 1 的维度,使上述条件成立

广播的规则:

  • 规则 1:若是两个数组的维度数不相同,那么小维度数组的形状将会在最左边补 1。
  • 规则 2:若是两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度 为 1 的维度扩展以匹配另一个数组的形状。
  • 规则 3:若是两个数组的形状在任何一个维度上都不匹配而且没有任何一个维度等于 1, 那么会引起异常。

1.一、形状相同的广播

image

1.二、相同维度,但其中某一个或多个维度长度为 1 的广播:

image

1.三、较少的维度,默认在其前面追加长度为 1 的维度:

image

1.四、若是是标量的话,会广播整个数组上:

image

二、广播示例

2.一、将数组赋值给a并查看数组的形状

image

2.二、将数组赋值给b并查看数组的形状

image

2.三、将数组a转换为4行1列

image

2.四、数组a+b,并查看形状

image

image

明显能够看出,相加前 a 的形状为 (4, 1), b 的形状为 (3, ), a+b 的结果的形状为(4, 3)。计算时,变换结果与上图相似,这里来详细介绍下:

image

2.五、如今尝试模拟一个广播的方式, 把a中的每一个元素拉长三倍

image

2.六、b 中的元素拉长4倍

image

2.七、aa+bb

image

2.八、a+b

image

这里咱们就能看出,咱们将数组扩展到较大的维度再进行通用函数操做,和咱们直接进行广播操做结果是同样的。

3、Numpy中的运算

一、算术运算

Numpy中用于执行算术运算(如 add() ,subtract() ,multiply() 和 divide() )的输入数组必须具 有相同的形状或符合数组广播规则。

经常使用数学运算函数:

数学运算函数

add(x1,x2 )

按元素添加参数,等效于 x1 + x2

subtract(x1,x2)

按元素方式减去参数,等效于x1 - x2

multiply(x1,x2)

逐元素乘法参数,等效于x1 * x2

divide(x1,x2)

逐元素除以参数,等效于x1 / x2

exp(x)

计算e的x次方。

exp2(x)

计算2的x次方。

power(x1,x2)

计算x1的x2次幂。

mod(x)

返回输入数组中相应元素的除法余数.

log(x)

天然对数,逐元素。

log2(x)

x的基础2对数。

log10(x)

以元素为单位返回输入数组的基数10的对数。

expm1(x)

对数组中的全部元素计算exp(x) - 1

log1p(x)

返回一个加天然对数的输入数组。

sqrt(x)

按元素方式返回数组的正平方根。

square(x)

返回输入的元素平方。

sin(x)

三角正弦。

cos(x)

元素余弦。

tan(x)

逐元素计算切线。

1.一、生成一个3行3列元素类型为浮点型的数组和一个1行3列的数组

image

1.二、执行数组加法

image

1.三、执行数组减法

image

1.四、执行数组的乘法

image

1.五、执行数组的除法

image

1.六、numpy.reciprocal()

此函数返回参数逐元素的倒数,因为 Python 处理整数除法的方式,对于绝对值大于 1 的整数 元素,结果始终为 0,对于整数 0,则发出溢出警告。

image

1.七、进行指数运算

image

1.八、执行幂运算

image

1.九、numpy.mod()

此函数返回输入数组中相应元素的除法余数。函数 numpy.remainder() 也产生相同的结果。

image

1.十、对含有复数的数组进行执行的函数

image

  • numpy.real() 返回复数类型参数的实部。
  • numpy.imag() 返回复数类型参数的虚部。

image

  • numpy.conj() 返回经过改变虚部的符号而得到的共轭复数。

image

  • numpy.angle() 返回复数参数的角度。函数的参数是 degree 。若是为 true,返回的角度以角度制来表示,不然为以弧度制来表示。

image

1.十一、执行三角函数

image

  1. 补充
  • numpy.around()

这个函数返回四舍五入到所需精度的值。decimals 表示要舍入的小数位数。默认值为 0。若是 为负,整数将四舍五入到小数点左侧的位置

image

同pyhon内置同样,在进行舍入的时候须要注意二进制小数的精度问题

image

  • numpy.floor() 向下取整

此函数返回不大于输入参数的最大整数。即标量 x 的下限是最大的整数 i ,使得 i <= x。注意 在 Python 中,向下取整老是从 0 舍入。

image

  • numpy.ceil()向上取整

本函数返回输入值的上限,即,标量 x 的上限是最小的整数 i ,使得 i> = x。

image

二、字符串函数

如下函数用于对 dtype 为 numpy.string 或 numpy.unicode 的数组执行向量化字符串操做。 它们基于 Python 内置库中的标准字符串函数。

2.一、numpy.char.add()

函数执行按元素的字符串链接:

image

2.二、numpy.char.multiply()

这个函数执行多重链接:

image

2.三、numpy.char.center()

此函数返回所需宽度的数组,以便输入字符串位于中心,并使用 fillchar 在左侧和右侧进行填充:

image

2.四、numpy.char.capitalize()

函数返回字符串的副本,其中第一个字母大写:

image

2.五、numpy.char.title()

返回输入字符串的按元素标题转换版本,其中每一个单词的首字母都大写:

image

2.六、numpy.char.lower()

函数返回一个数组,其元素转换为小写。它对每一个元素调用 str.lower:

image

2.七、numpy.char.upper()

函数返回一个数组,其元素转换为大写。它对每一个元素调用 str.upper:

image

2.八、numpy.char.split()

此函数返回输入字符串中的单词列表。默认状况下,空格用做分隔符。不然,指定的分隔符字符用于分割字符串:

image

2.九、numpy.char.splitlines()

函数返回数组中元素的单词列表,以换行符分割:'n','r','rn' 都被当作换行符处理。

image

2.十、numpy.char.strip()

函数返回数组的副本,其中元素移除了开头或结尾处的特定字符:

image

2.十一、numpy.char.join()

这个函数返回一个字符串,其中单个字符由特定的分隔符链接:

image

2.十二、numpy.char.replace()

这个函数返回字符串副本,其中全部字符序列的出现位置都被另外一个给定的字符序列取代:

image

三、统计函数

NumPy有不少有用的统计函数,用于从数组中给定的元素中查找最小,最大,百分标准差和方差等。

经常使用统计函数

numpy.amin()

从给定数组中的元素沿指定轴返回最小值

numpy.amax()

从给定数组中的元素沿指定轴返回最大值

numpy.ptp()

返回沿轴的值的极差(最大值 - 最小值)

numpy.percentile()

返回特定轴的百分位数

numpy.median()

返回数组中值

numpy.mean()

返回数组的算术平均值

numpy.average()

返回数组的加权平均值

numpy.std()

返回数组的标准差

numpy.var()

返回数组的方差

3.一、numpy.amin() 和 numpy.amax()

这些函数从给定数组中的元素沿指定轴返回最小值和最大值。

image

3.三、numpy.ptp()

本函数返回沿轴的值的极差(最大值 - 最小值)。

image

3.四、numpy.percentile()

百分位数是统计中使用的度量,表示小于这个值得观察值占某个百分比。函数numpy.percentile() 接受如下参数。

numpy.percentile(a, q, axis):

  • a 输入数组
  • q 要计算的百分位数,在 0 ~ 100 之间
  • axis 沿着它计算百分位数的轴

image

3.五、numpy.median()

中值定义为将数据样本的上半部分与下半部分分开的值。

image

3.六、numpy.mean()

算术平均值是沿轴的元素的总和除以元素的数量。函数返回数组中元素的算术平均值。若是提供了轴,则沿其计算。

image

3.七、numpy.average()

加权平均值是由每一个份量乘以反映其重要性的因子获得的平均值。函数根据在另外一个数组中给出的各自的权重计算数组中元素的加权平均值。该函数能够接受一个轴参数。若是没有指定轴,则数组会被展开。

考虑数组 [1,2,3,4] 和相应的权重 [4,3,2,1] ,经过将相应元素的乘积相加,并将和除以权重的和,来计算加权平均值。

加权平均值 = (14+23+32+41)/(4+3+2+1)

image

不指定权重时至关于mean函数

image

image

若是returned参数设为true,则返回权重的和

image

3.八、numpy.std()

标准差是与均值的误差的平方的平均值的平方根。标准差公式以下: std = sqrt(mean((x - x.mean())**2))

image

方差是误差的平方的平均值,即mean((x - x.mean())** 2)。换句话说,标准差是方差的平方根。

image

四、排序、搜索和计数函数

4.一、numpy.sort()函数返回输入数组的排序副本。

image

image

4.二、numpy.argsort()

函数对输入数组沿给定轴执行间接排序,并使用指定排序类型返回数据的索引数组。这个索引 数组用于构造排序后的数组。

image

4.三、numpy.lexsort()

函数使用键序列执行间接排序。键能够看做是电子表格中的一列。该函数返回一个索引数组,使用它能够得到排序数据。注意,最后一个键刚好是 sort 的主键。

image

4.四、numpy.argmax() 和 numpy.argmin()

这两个函数分别沿给定轴返回最大和最小元素的索引

image

4.五、numpy.nonzero()

函数返回输入数组中非零元素的索引。

image

4.六、numpy.where()

函数返回输入数组中知足给定条件的元素的索引。

image

4.七、numpy.extract()

函数返回知足任何条件的元素。

image

五、转置

Numpy 的转置能够按照你的须要对数组的轴进行转换。

image

须要注意的是,转置只能发生在二维及以上的维度的数组上生效,一维的数组只有一个维度是 不能够转置的。

image

六、惟一化和集合逻辑

  • np.unique() 去重函数
  • np.in1d() 验证元素是否在给定序列中
  • np.intersect1d() 求交集
  • np.union1d() 求并集
  • np.setdiff1d() 求差集

6.1去重

  • 字符串去重

image

  • 整数去重

image

  • 布尔值去重

image

  • 布尔值的any()和all()函数

image

6.二、检验元素

image

6.三、求交集

image

6.四、求并集

image

6.五、求差集

image

相关文章
相关标签/搜索