该部分位于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 == 01   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. NumPy中可用的聚合函数

  2. python数据分析 - numpy | ndarray数组 | numpy常用函数

    文章目录 数据分析 numpy概述 numpy历史 numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象的创 ...

  3. [转载] 详解 Numpy.ndarray

    参考链接: Python中的numpy.ndarray.flat 向量.矩阵 & 多维数组是数值计算中必不可少的工具:通过对数组数据进行批量处理,避免了对数组元素显式地进行循环操作,这样做的结 ...

  4. python3 多维数组 NumPy ndarray 简介

    目录 基础 重要属性 创建 Converting Python array_like Objects to NumPy Arrays 多维数组 一维 通用数学函数 基础 NumPy 的主要对象是齐次多 ...

  5. 利用Python中的numpy.ndarray.reshape()对阵列形状进行调整

    我们在进行阵列运算的时候,常常要根据需要调整阵列的形状,numpy库中的函数reshape()可以方便地实现对阵列形状进行调整. 其函数原型如下: dst = numpy.ndarray.reshap ...

  6. Python:numpy库中的一些函数简介、使用方法之详细攻略

    Python:numpy库中的一些函数简介.使用方法之详细攻略 目录 numpy库中的一些函数简介.使用方法 1.np.concatenate() 1.1.函数案例 1.2.函数用法 numpy库中的 ...

  7. Python 保存数组至.mat文件,报错:AttributeError: 'numpy.ndarray' object has no attribute 'items'

    Python保存数组的方式有很多种,如savetxt,但这个函数只能保存一维或二维数组.为了保存高维数组,同时能够在matlab载入,可以使用scipy.io.savemat()函数,例子: impo ...

  8. AttributeError: 'numpy.ndarray' object has no attribute 'value_counts'

    <python机器学习及实践>第二章第一个代码运行报错: AttributeError: 'numpy.ndarray' object has no attribute 'value_co ...

  9. Oracle入门(十四D)之常规函数

    一.NULL处理 (1)函数的计算过程 到目前为止,您已经学会了在简单语句中应用单行函数.不过,函数可以嵌套任意层.所以,了解嵌套函数的计算过程非常重要.下例就是一个嵌套函数.其计算过程是从最里层开始 ...

最新文章

  1. 浅谈tidb事务与MySQL事务之间的区别
  2. vim normal 模式下L键
  3. php中的thumb函数,phpcms v9 thumb(缩略图) 函数说明
  4. dbms数据库管理系统_DBMS中的数据库语言
  5. 基于python下django框架 实现旅游景区景点售票系统详细设计
  6. 曙光超级计算机用的芯片是国产吗,真正中国芯片龙头是中科曙光
  7. 计算机基础阿春第十一讲,编程天才少年“顾神”,放弃清华保送,被麻省理工全额奖学金挖走...
  8. AMS1117稳压芯片介绍
  9. 倒序输出字符串,如输入i love you,则输出you love i
  10. Express高效查询纯真IP库插件lib-qqwry
  11. 网元的概念 --- 分布式1
  12. Android Camera2 Opengles2.0 实时滤镜(冷暖色/放大镜/模糊/美颜)
  13. jdk8新特性-Lambda表达式,方法引用
  14. 如何计算图论中的模块化modularity指标,图论中的社区检测算法——Louvain community
  15. 大数据告诉你,从洛阳北大青鸟毕业的学生未来发展到底怎么样?
  16. ubuntu下安装windows adobeflash播放器插件
  17. 分享100个ASP源代码总有一个是你想要的
  18. IAR教程之IAR常用功能简介
  19. Django项目实战——7—(openid是否绑定用户的处理、用户基本信息渲染、添加和验证邮箱)
  20. 一些shell总结2

热门文章

  1. 爆火的Java面试题-kafka源码解析与实战豆瓣
  2. java程序员年龄大了怎么办,互联网行业“中年”危机
  3. java.util.LinkedHashMap cannot be cast to Entity
  4. c++ 获取当前时间_ThinkPHP6中获取参数的3种常用方法【总结】
  5. 改变维度_一个人的各种维度,哪些是可以改变的?
  6. python求一元三次方程的根_关于二次、三次、四次方程求解方法讨论
  7. qq为何没有linux版本,如何安装linux版本QQ?
  8. error C3646: “noexcept”: 未知重写说明符_三个世纪以来首次发现:大脑中还藏着一种未知的器官?...
  9. vue3中v-model的重大更新
  10. 质性研究工具_MAXQDA在质性数据分析中的使用——免费的中文在线研讨会!