python数组全部平⽅_Numpy中的⼴播和数组运算
⼀、概述
在Numpy中当数组进⾏运算时,如果两个数组的形状相同,那么两个数组相乘就是两个数组的对应位相乘,这是要求维数相乘,并且各维度的长度相同,但是当运算中两个数组的形状不同使时,numpy将会⾃动触发⼴播机制,所以我们要了解numpy的⼴播机制,才能更好的进⾏数组的运算。
⼆、Numpy中的⼴播
1、什么是⼴播
我们都知道,Numpy中的基本运算(加、减、乘、除、求余等等)都是元素级别的,但是这仅仅局限于两个数组的形状相同的情况下。
可是⼤家⼜会发现,如果让⼀个数组加1的话,结果时整个数组的结果都会加1,这是什么情况呢?
其实这就是⼴播机制:Numpy 可以转换这些形状不同的数组,使它们都具有相同的⼤⼩,然后再对它们进⾏运算。下⾯是⼴播⽰意图:
术语⼴播是指 NumPy 在算术运算期间处理不同形状的数组的能⼒。对数组的算术运算通常在 相应的元素上进⾏。如果两个阵列具有完全相同的形状,则这些操作被⽆缝执⾏。
如果两个数组的维数不相同,则元素到元素的操作是不可能的。然⽽,在 NumPy 中仍然可以对形状不相似的数组进⾏操作,因为它拥有⼴播功能。较⼩的数组会⼴播到较⼤数组的⼤⼩,以便使它们的形状可兼容。
如果满⾜以下条件之⼀,那么数组被称为可⼴播的。
数组拥有相同形状。
数组拥有相同的维数,且某⼀个或多个维度长度为 1 。
数组拥有极少的维度,可以在其前⾯追加长度为 1 的维度,使上述条件成⽴
⼴播的规则:
规则 1:如果两个数组的维度数不相同,那么⼩维度数组的形状将会在最左边补 1。
规则 2:如果两个数组的形状在任何⼀个维度上都不匹配,那么数组的形状会沿着维度 为 1 的维度扩展以匹配另外⼀个数组的形状。
规则 3:如果两个数组的形状在任何⼀个维度上都不匹配并且没有任何⼀个维度等于 1, 那么会引发异常。
1.1、形状相同的⼴播
1.2、相同维度,但其中某⼀个或多个维度长度为 1 的⼴播:
1.3、较少的维度,默认在其前⾯追加长度为 1 的维度:
1.4、如果是标量的话,会⼴播整个数组上:
2、⼴播⽰例
2.1、将数组赋值给a并查看数组的形状
2.2、将数组赋值给b并查看数组的形状
2.3、将数组a转换为4⾏1列
2.4、数组a+b,并查看形状
明显可以看出,相加前 a 的形状为 (4, 1), b 的形状为 (3, ), a+b 的结果的形状为(4, 3)。计算时,变换结果与上图类似,这⾥来详细介绍下:
2.5、现在尝试模拟⼀个⼴播的⽅式, 把a中的每个元素拉长三倍
2.6、b 中的元素拉长4倍
2.7、aa+bb
2.8、a+b
这⾥我们就能看出,我们将数组扩展到较⼤的维度再进⾏通⽤函数操作,和我们直接进⾏⼴播操作结果是⼀样的。
三、Numpy中的运算
1、算术运算
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)数组全部赋值为1
以元素为单位返回输⼊数组的基数10的对数。expm1(x)
对数组中的所有元素计算exp(x) - 1
log1p(x)
返回⼀个加⾃然对数的输⼊数组。
sqrt(x)
按元素⽅式返回数组的正平⽅根。
square(x)
返回输⼊的元素平⽅。
sin(x)
三⾓正弦。
cos(x)
元素余弦。
tan(x)
逐元素计算切线。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论