该部分位于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

numpy 广播

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

 x > 0    return    1
 
对于虚数 complex 而言
x.real  !=  0    return sign( x.real ) + 0 j
x.real == 0     return sign( x.imag ) + 0 j
注:real为实部,imag为虚部
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可用的常规函数的更多相关文章

  1. javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数

    javascript函数一共可分为五类:    ·常规函数    ·数组函数    ·日期函数    ·数学函数    ·字符串函数    1.常规函数    javascript常规函数包括以下9个 ...

  2. NumPy Ndarray 对象

    NumPy Ndarray 对象 NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引. ndarray 对象是用于存放 ...

  3. numpy.random.random & numpy.ndarray.astype & numpy.arange

    今天看到这样一句代码: xb = np.random.random((nb, d)).astype('float32') #创建一个二维随机数矩阵(nb行d列) xb[:, 0] += np.aran ...

  4. Python中Numpy ndarray的使用

    本文主讲Python中Numpy数组的类型.全0全1数组的生成.随机数组.数组操作.矩阵的简单运算.矩阵的数学运算. 尽管可以用python中list嵌套来模拟矩阵,但使用Numpy库更方便. 定义数 ...

  5. Numpy Ndarray对象1

    标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指 针.这样为了保存一个简单的[1,2,3],需要有3个指针和三 ...

  6. python:<class 'numpy.ndarray'>的学习

    在学习opencv-python的时候,给出图片地址再调用cv2.imread("地址"),发现出创建的是numpy类型的ndarray对象,用来存放多维数组的对象 # 导入cv2 ...

  7. 初探numpy——广播和数组操作函数

    numpy广播(Broadcast) 若数组a,b形状相同,即a.shape==b.shape,那么a+b,a*b的结果就是对应数位的运算 import numpy as np a=np.array( ...

  8. Lesson2——NumPy Ndarray 对象

    NumPy 教程目录 NumPy Ndarray 对象 NumPy 最重要的一个特点是其 $N$ 维数组对象 ndarray,它是一系列同类型数据的集合,以 $0$ 下标为开始进行集合中元素的索引. ...

  9. JavaScrip常规函数

    JavaScrip常规函数包括以下8个:alert函数:显示一个警告对话框,包括一个"OK"按钮.confirm函数:显示一个确认对话框,包括一个"OK".&q ...

随机推荐

  1. Try Before Choosing

     Try Before Choosing Erik Doernenburg CREATing An AppliCATion REquiRES MAKing MAny dECiSionS. Some ...

  2. [工具IDE]工具与书籍

    看到几个还不错的资源,记录于下: 一.使用 JavaScript 写的操作系统: http://www.admin10000.com/document/3811.html 演示地址参考:http:// ...

  3. linux cp 命令详解

    /home/lee#cp --help 用法:cp [选项]... 来源 目的地 或:cp [选项]... 来源... 目录 或:cp [选项]... --target-directory=目录 来源 ...

  4. Statement、PreparedStatemnt、CallableStatement

    第一.Statement(Statement代表一个特定的容器,来对一个特定的数据库执行语句) * 执行查询的方法 Statement=Connection.createStatement();//创 ...

  5. EL和OGNL表达式的区分

    OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="#xx" /> struts页面中不能单独使用,el可以单独使用 ${ses ...

  6. MySQL:Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT...

    1:错误日志大量错误 150602 14:40:02 [Warning] Unsafe statement written to the binary log using statement form ...

  7. ssh 防止超时掉线

    超时掉线的机制原始驱动力是什么?反正远程操作久置掉线确实挺烦的. 解决的办法呢,也是有的,客户端和服务器端都可以做.就是使用 no-op 反空闲协议发送呼吸包,来确认另一端是否在线:没回应就下线,而不 ...

  8. Linux文件系统操作

    1:查看磁盘使用情况 df [-选项] 目录名 2:查看目录下文件大小 du 目录名称 3:实体链接 创建inode产生一个新文件名,链接到一个已有的文件. 限制:不能垮文件系统进行实体链接:不能链接 ...

  9. java 判断是否为纯数字

      java 判断是否为数字格式 CreateTime--2017年12月1日10:37:00 Author:Marydon java 判断是否为数字格式 /** * 判断是否为数字格式不限制位数 * ...

  10. mysql加密函数

    md5 password() //案例 mysql> select md5('xiaodeng'); +----------------------------------+ | md5('xi ...