numpy ndarray可用的常规函数
该部分位于numpy - ref - 1.14.5中的2.8 available ufuncs
1 数学运算
1.1 元素级加法 add
加法规则:
numpy.add(x1, x2, /, out=None, *, where=True, casting=’same_kind’, order=’K’, dtype=None, subok=True[, signature, extobj]) = <ufunc 'add'>
x1 ,x2 - number,ndarray,Iterable 均可,实际上一般为ndarray。
out - 存储结果的位置,如果提供,其必须事具有输入广播的形状,如果无或者不提供,则返回新分配的数组;元组(可能仅作为关键字参数)的长度必须等于输出的数量。
余下参数略,不做说明,实际上记住 numpy.add(x1, x2) 即可,余下参数用的不多
示例一:一个ndarray + 数字
将数字与ndarray中的每一个元素相加
a = np.arange(1,5).reshape(2,2) print(a) # [[1 2] # [3 4]] b = np.add(a,2) print(b) # [[3 4] # [5 6]]
示例二:两个同shape的ndarray相加
对应元素相加
a = np.arange(1,5).reshape(2,2) print(a) # [[1 2] # [3 4]] b = np.arange(0,4).reshape(2,2) print(b) # [[0 1] # [2 3]] c = np.add(a,b) print(c) # [[1 3] # [5 7]]
示例三:两个shape不全相等的ndarray相加
此时相当于 广播
a = np.arange(1,5).reshape(2,2) print(a) # [[1 2] # [3 4]] b = np.arange(0,2) print(b) # [0 1] c = np.add(a,b) print(c) # [[1 3] # [3 5]]
示例四:两个shape不全相等的ndarray相加
此时 与 广播 等价
a = np.arange(1,5).reshape(2,2) print(a) # [[1 2] # [3 4]] b = np.arange(0,2).reshape(-1,1) print(b) # [[0] # [1]] c = np.add(a,b) print(c) # [[1 2] # [4 5]]
示例五:两个shape不全相等的ndarray相加
此时相当于广播
a = np.arange(1,5).reshape(2,2) print(a) # [[1 2] # [3 4]] b = np.arange(0,4).reshape(1,2,2) print(b) # [[[0 1] # [2 3]]] c = np.add(a,b) print(c) # [[[1 3] # [5 7]]]
示例六:x1 x2的shape值不符合广播规则时,无法add
a = np.arange(1,5).reshape(2,2) print(a) # [[1 2] # [3 4]] b = np.arange(0,4) print(b) # [0 1 2 3] c = np.add(a,b) print(c) # ValueError: operands could not be broadcast together with shapes (2,2) (4,)
a = np.arange(1,7).reshape(2,3) print(a) # [[1 2 3] # [4 5 6]] b = np.arange(0,4).reshape(2,2) print(b) # [[0 1] # [2 3]] c = np.add(a,b) print(c) # ValueError: operands could not be broadcast together with shapes (2,3) (2,2)
综上:当x1.shape != x2.shape 时,x1 x2 必须可广播到一个通用形状(可能是其中一个或另一个形状shape)they must be broadcastable to a common shape (which may be the shape of one or the other)。
1.2 元素级减法 subtract(x1, x2)
相减,该算法与加法相似,略
1.3 元素级乘法 multiply(x1,x2)
乘法,示例
# a = np.arange(1,5).reshape(2,2) a = np.arange(1,5) print(a) # [1 2 3 4] b = np.arange(0,4).reshape(-1,1) print(b) # [[0] # [1] # [2] # [3]] c = np.multiply(a,b) print(c) # [[ 0 0 0 0] # [ 1 2 3 4] # [ 2 4 6 8] # [ 3 6 9 12]]
1.4 元素级除法 divide(x1, x2)、floor_divide(x1, x2)、floor_divide(x1, x2)
a = np.arange(1,5) print(a) #[1 2 3 4] b = np.divide(a,2) print(b) # [0.5 1. 1.5 2. ] c = np.true_divide(a,2) print(c) # [0.5 1. 1.5 2. ] d = np.floor_divide(a,2) print(d) # [0 1 1 2] print(a/2) # [0.5 1. 1.5 2. ] print(a//2) # [0 1 1 2]
注解:
(1)divide(x1, x2)、 true_divide、 / 是等价的,为真除
(2)floor_divide(x1, x2) 、// 是等价的,为地板除
1.5 元素级 幂指数和的对数计算 logaddexp(x1, x2)、logaddexp2(x1, x2)
logaddexp(x1, x2) 等价于 log(exp(x1) + exp(x2)) ,
logaddexp2(x1, x2) 等价于 log2(2**x1 + 2**x2)
该函数在统计学方面是非常有用的,其计算的时间概率非常小,甚至超过了正常浮点数的范围。
a = np.arange(0,3) print(a) # [0 1 2] b = np.arange(1,4) print(b) # [1 2 3] c = np.logaddexp(a,b) print(c) # [1.31326169 2.31326169 3.31326169]
1.6 元素级 指数函数exp(x)、exp2(x)、expm1(x)
exp(x) - 计算所有元素的对数(以自然对数 e - 2.718281为底)
exp2(x) - 计算所有元素的对数(以2为底)
expm(x) - 计算数组中所有元素的 exp(x) - 1
a = np.arange(0,3) print(a) # [0 1 2] b = np.exp(a) print(b) # [1. 2.71828183 7.3890561 ] c = np.expm1(a) print(c) # [0. 1.71828183 6.3890561 ] d = np.exp2(a) print(d) # [1. 2. 4.]
1.7 元素级 自然对数 log(x)、log2(x)、log10(x)、log1p(x)
log(x) - 自然对数,以自然数e为底的x的对数
log2(x) - 2为底的对数
log10(x) - 10为底的对数
log1p(x) - 计算 log(1 + x).
a = np.arange(0,3) print(a) # [0 1 2] b = np.exp(a) print(b) # [1. 2.71828183 7.3890561 ] c = np.log(b) print(c) # [0. 1. 2.] d = np.log1p(b) print(d) # [0.69314718 1.31326169 2.12692801]
1.8 相反数negative(x)
取x的相反数,类似函数 y = -x
a = np.array([0,-1,2,-3) b = np.negative(a) print(b) # [ 0 1 -2 3]
1.9 positive(x)
返回 y (= +x) ,略
1.10 元素级 幂 power(x1, x2)
类似函数 y = x1 ** x2 ,
第一个array elements x1 raised to powers 从第二个 array 中
a = range(6) print(a) # range(0, 6) b = np.power(a,2) print(b) # [ 0 1 4 9 16 25]
示例二
a = range(6) print(a) # range(0, 6) b = [6.0, 5.0, 4.0, 3.0, 2.0, 1.0] c = np.power(a,b) print(c) # [ 0. 1. 16. 27. 16. 5.]
示例三(the effect of broadcasting 广播的作用)
a = range(6) print(a) # range(0, 6) b = np.array([[6, 5, 4, 3, 2, 1], [6, 5, 4, 3, 2, 1]]) c = np.power(a,b) print(c) # [[ 0 1 16 27 16 5] # [ 0 1 16 27 16 5]]
1.11 余数remainder(x1, x2)
示例一
a = np.array([1,2,3,4]) c = np.remainder(a,2) print(c) # [1 0 1 0]
示例二
a = np.remainder([4,7],[2,3]) print(a) #[0 1]
对于余数,其实 remainder() 余数计算是 floor_divide() 的地板除计算的 complementary。
示例三
a = np.remainder( [4, 7, -7, 7, -7], [2, 3, 3, -3, -3] # [0 1 2 -2 -1] a的值 ) print(a)
1.12 模运算mod(x1, x2)、fmod(x1, x2)、divmod(x1,x2)
mod(x1, x2) - mod函数与remainder函数的功能完全一致
fmod(x1, x2) - fmod函数所得余数值得正负由被除数决定,与除数得正负无关,此与mod、remainder、%处理负数的方式不同。
a = np.mod( [4, 7, -7, 7, -7],# 被除数 [2, 3, 3, -3, -3] # 除数 # [0 1 2 -2 -1] mod 余数正负由被除数 除数一起决定 ) print(a) b = np.fmod( [4, 7, -7, 7, -7], # 被除数 [2, 3, 3, -3, -3] # 除数 # [0 1 -1 1 -1] fmod余数正负由被除数决定,与除数正负无关 ) print(b)
divmod(x1,x2) - 函数所得余数正负与 mod 函数相同,其会返回一个包含 floor_divide 和 mod 的元组,
a = np.divmod( [4, 7, -7, 7, -7],# 被除数 [2, 3, 3, -3, -3] # 除数 # (array([ 2, 2, -3, -3, 2], dtype=int32),该结果值与floor_divide类似 # array([ 0, 1, 2, -2, -1], dtype=int32)) 该结果值与mod类似 ) print(a)
1.13 绝对值 absolute(x)、fabs(x)
absolute(x) - 绝对值(返回值为整型)
fabs(x) - 绝对值(返回值浮点类型)
a = np.array([0,-1,2,-3,4]) b = np.absolute(a) print(b) #[0 1 2 3 4] c = np.fabs(a) print(c) # [0. 1. 2. 3. 4.]
1.14 四舍五入 rint(x)
将数组中的元素舍入到最接近的整数。
a = np.array([1.4, 1.5, 1.6, 2.4, 2.5, 2.6]) c = np.rint(a) print(c) # [ 1. 2. 2. 2. 2. 3.]
四舍五入:四舍六入五留双
1.15 数学标志符号 sign(x)
返回一个数字符号的元素指示
对于实数而言
x < 0 return -1
x == 0 return 1
a = np.array([-5,5]) b = np.sign(a) print(b)#[-1 1] c = np.sign(5-2j) print(c)#(1+0j) d = np.sign(-2j) print(d)#(-1+0j)
1.16 分段函数 heaviside(x1, x2)
0 if x1 < 0 heaviside(x1, x2) = x2 if x1 == 0 1 if x1 > 0
示例:
a = np.heaviside([-1.5, 0, 2.0], 0.5) print(a)# [0. 0.5 1. ] a = np.heaviside([-1.5, 0, 2.0], 1) print(a) # [0. 1. 1.]
1.17 复共轭 conj(x)
复数的复共轭是通过改变其虚部的符号来获得的。
a = np.conjugate(2+2j) print(a)# (2-2j)
1.18 算术平方根sqrt(x)、立方根 cbrt(x)
a = np.arange(0,4) print(a) # [0 1 2 3] b = np.sqrt(a) print(b) # [0. 1. 1.41421356 1.73205081] c = np.cbrt([0,1,8,27]) print(c) # [0. 1. 2. 3.]
1.19 平方 square(x)
a = np.square([0,1,2,3]) print(a) # [0 1 4 9]
1.20 倒数 reciprocal(x)
a = np.reciprocal([1,2,3]) print(a) # [1 0 0] b = np.reciprocal([1.,2.,3.]) print(b) # [1. 0.5 0.33333333]
备注,倒数与原数的数据类型一致。
numpy ndarray可用的常规函数的更多相关文章
- javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数
javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数 1.常规函数 javascript常规函数包括以下9个 ...
- NumPy Ndarray 对象
NumPy Ndarray 对象 NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引. ndarray 对象是用于存放 ...
- numpy.random.random & numpy.ndarray.astype & numpy.arange
今天看到这样一句代码: xb = np.random.random((nb, d)).astype('float32') #创建一个二维随机数矩阵(nb行d列) xb[:, 0] += np.aran ...
- Python中Numpy ndarray的使用
本文主讲Python中Numpy数组的类型.全0全1数组的生成.随机数组.数组操作.矩阵的简单运算.矩阵的数学运算. 尽管可以用python中list嵌套来模拟矩阵,但使用Numpy库更方便. 定义数 ...
- Numpy Ndarray对象1
标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指 针.这样为了保存一个简单的[1,2,3],需要有3个指针和三 ...
- python:<class 'numpy.ndarray'>的学习
在学习opencv-python的时候,给出图片地址再调用cv2.imread("地址"),发现出创建的是numpy类型的ndarray对象,用来存放多维数组的对象 # 导入cv2 ...
- 初探numpy——广播和数组操作函数
numpy广播(Broadcast) 若数组a,b形状相同,即a.shape==b.shape,那么a+b,a*b的结果就是对应数位的运算 import numpy as np a=np.array( ...
- Lesson2——NumPy Ndarray 对象
NumPy 教程目录 NumPy Ndarray 对象 NumPy 最重要的一个特点是其 $N$ 维数组对象 ndarray,它是一系列同类型数据的集合,以 $0$ 下标为开始进行集合中元素的索引. ...
- JavaScrip常规函数
JavaScrip常规函数包括以下8个:alert函数:显示一个警告对话框,包括一个"OK"按钮.confirm函数:显示一个确认对话框,包括一个"OK".&q ...
随机推荐
- Direct2D教程II——绘制基本图形和线型(StrokeStyle)的设置详解
目前,在博客园上,相对写得比较好的两个关于Direct2D的教程系列,分别是万一的Direct2D系列和zdd的Direct2D系列.有兴趣的网友可以去看看.本系列也是介绍Direct2D的教程,是基 ...
- JavaScript筛选出数组种连续的数字
function arrange(source) { var t; var ta; var r = []; for(var j=0;j<source.length;j++){ var v=sou ...
- 获取sevlet response值
调用: PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8 ...
- SpringBoot报错 : Whitelabel Error Page
添加了一个Controller类,本来想试下Spring MVC是否可以正常运行,结果报错,Controller类的内容: @RestController public class Test1Cont ...
- Jenkins Xcode打包ipa
本地打包. 如果Mac 上没有安装brew.先安装:ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/ins ...
- Asp.Net下通过切换CSS换皮肤
直接重写Render事件 protected override void Render(System.Web.UI.HtmlTextWriter writer) { StringWriter sw = ...
- angularjs的config和interceptor - session注入
config 这个要从config的正确使用说起,也许你想在config某个provider的时候注入$rootscope, 但是这是不允许的,我们细看下面的特性 session注入 每个请求自带se ...
- 使用go语言解析xml
操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 问题描述 现有一个自动报障程序,如果服务出错会自动给指定人发送邮件,配置文件内容如下(default.xml): <?xml ...
- 解决 Out of range value adjusted for column 'ID' at row 1
MySQL升级到5.0.17后,在执行sql语句INSERT INTO `news` (`ID`, `Title`, `Content`) VALUES ('', '标题', '正文');时出现错误: ...
- emplace_back() 和 push_back 的区别(转)
在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放 ...