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 ...
随机推荐
- Springmvc 服务器端文件下载
转自:http://blog.csdn.net/boneix/article/details/51303280 业务场景:点击下载后直接保存而不是打开 解决代码:前端传入url /** * 返回流 * ...
- Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别
Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口. 格式为: Class1.isAssignable ...
- 求两个有序数组的中位数或者第k小元素
问题:两个已经排好序的数组,找出两个数组合并后的中位数(如果两个数组的元素数目是偶数,返回上中位数). 设两个数组分别是vec1和vec2,元素数目分别是n1.n2. 算法1:最简单的办法就是把两个数 ...
- Selenium2(WebDriver)总结(四)---基本元素操作
WebDriver提供了常用的WEB控件的操作方法,比如:按钮.输入框.超链接等,废话不多说,直接上代码: import org.openqa.selenium.By; import org.open ...
- Word转PDF非常好用的软件——pdfFactory Pro
pfdFactory Pro把word转为pdf的操作步骤: 1.打开将要转换的word的文档: 2.文件--->打印: 弹出如下对话框: 单击确定后弹出:
- HttpLuaModule——翻译(一)
最近经常使用春哥和小哲老师写的NGINX-LUA,非常苦于没有中文文档,特别是向我这种英文水平实在有限的同学,所以将遇到的模块记录下来,供以后参考!原文:http://wiki.nginx.org/H ...
- js 实现继承的6种方式(逐渐优化)
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- golang之tcp自动重连
操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 问题描述 现有一个tcp客户端程序,需定期从服务器取数据,但由于种种原因(网络不稳定等)需要自动重连. 测试服务器示例代码: /* ...
- mysql代理之Atlas
Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy0.8.2版本号的基础上.改动了大量bu ...
- 【leetcode】solution in java——Easy2
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6410409.html 6:Reverse String Write a function that takes ...