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 ...
随机推荐
- Objective-C 简介
很少有人会想到 Objective-C 历史悠久,并且它实际上影响了很多其他的编程技术.比如, Java 编程语言和 Objective-C 就有很多共同点.原因就是在 Objective-C 的早期 ...
- RocketMQ【未完成】
RocketMQ 是一款快速地.可靠地.分布式.容易使用的消息中间件,由 alibaba 开发,其前身是 metaq,metaq 的第一个版本是可以看成是linkedin的kafka(scala)的j ...
- .NET Framework System.Array.Sort 数组类,加深对 IComparer、IComparable 以及泛型委托、匿名方法、Lambda 表达式的理解
本文内容 自定义类 Array.Sort 参考资料 System.Array.Sort 有很多对集合的操作,比如排序,查找,克隆等等,你可以利用这个类加深对 IComparer.IComparable ...
- Android 原生 Android ActionBar Tab (滑动)导航
本文内容 环境 项目结构 演示一:ActionBar Tab 导航 演示二:ActionBar Tab 带滑动导航 本文演示 Tab 导航.第一个演示,是基本的 Tab 导航,第二个是带滑动的 Tab ...
- redis-dev
redis install by centos -------------------------------------------------------------------------- ...
- SpeechLib 应用
//引用组件:Interop.SpeechLib.dll //导入空间:SpeechLib //引用组件:Interop.SpeechLib.dll//导入空间:SpeechLib //1.SpVoi ...
- 查看一个目录是否已经mount --bind
执行 mountpoint -q /test/mount echo $? 如果是0表示已经mount mountpoint -q /test/mount || mount -o bind /some/ ...
- 带你走进EJB--将EJB发布为Webservice(2)
在企业级的应用程序中经常都要把用不同语言写成的.在不同平台上运行的各种程序集成起来,而这种集成将花费很大的开发力量. 简单的一个例子:应用程序经常需要从运行在A主机上的程序中获取数据:或者把数据发送到 ...
- C# FTP常规方法
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- angularjs中的坑
ng-show 等ng的指令中不需要使用{{parameter}}来取值,回无效