数学运算 2018/6/18 2018/11/29
1.算术运算 # +, - ,*,/,//,%,divmod(),** or pow()
# 1)运算符
a=np.arange(1,7).reshape(2,3);b=2a+b==np.add(a,b)
a-b==np.subtract(a,b)
a*b==np.multiply(a,b)
a/b==np.divide(a,b) #array([[True,True,True],[True,True,True]])a/b #除法 #array([[0.5,1.,1.5],[2.,2.5, 3. ]])
a//2 #取整除法
a ** 2 #幂运算
a % 2 #取余 #array([[1, 0, 1],[0, 1, 0]], dtype=int32)
A.dot(B) #矩阵乘法# 2)通用函数ufunc:#倒数
np.reciprocal(1/4)==4/1 #True
np.log(np.arange(3)) # array([-inf, 0., 0.69314718])
np.sqrt(np.arange(3)) # array([0., 1.,1.41421356])x = np.array([ 1, 2, 3])
y = np.array([ 4, 5, 6])
np.maximum(x, y) # array([4, 5, 6])# 返回浮点数的整数和小数
x = np.array([ 3.2, 5.4,-2.8])
np.modf(x) #(array([ 0.2, 0.4, -0.8]), array([ 3., 5., -2.])) #三角函数
a = np.array([0,30,45,60,90])sin = np.sin(a*np.pi/180)#array([0.,0.5,0.70710678,0.8660254 ,1.])
inv = np.arcsin(sin)
np.around(inv,1) #array([0. , 0.5, 0.8, 1. , 1.6])
np.degrees(inv) #array([ 0., 30., 45., 60., 90.])注意:
1)单值计算采用math库函数,多值ndarray计算采用numpy中函数;a,b可为数组标量
2)如算式复杂且数组很大,会产生大量中间结果降低程序效率
如x=a*b+c相当于:t = a * b;x = t + c;del t
# 修改:x = a*b ;x += c #减少一次内存分配 
2.整数位运算 
No 函数 说明 符号
1 bitwise_and 对数组元素执行位与操作 &
2 bitwise_or 对数组元素执行位或操作 |
3 bitwise_xor 异或运算 ^
4 invert 按位取反 ~
5 left_shift 向左移动二进制表示的位 <<
6 right_shift 向右移动二进制表示的位 >>bin(13) # str '0b1101'
bin(~13) # str '-0b1110'
a=np.invert(np.array([13], dtype = np.uint8))# array([242], dtype=uint8)
np.binary_repr(~13,width=8) #整数位非 #'11110010'
np.binary_repr(a.item(),width=8) # '11110010'a=~np.arange(5, dtype=np.uint8) #位取反
# array([255, 254, 253, 252, 251], dtype=uint8)
[hex(i) for i in a] # ['0xff', '0xfe', '0xfd', '0xfc', '0xfb']np.binary_repr(10, width = 8) #'00001010'
np.binary_repr(10<<2, width = 8)#左移位 #'00101000'
np.binary_repr(np.left_shift(10,2), width = 8) #'00101000'a = np.array([0b1010, 0b0100, 0b1100, 0b1001])
b = np.array([0b1110, 0b1100, 0b1110, 0b0101])[bin(i) for i in a] # ['0b1010', '0b100', '0b1100', '0b1001']
[bin(i) for i in b] # ['0b1110', '0b1100', '0b1110', '0b101']
[bin(i) for i in a & b] # ['0b1010', '0b100', '0b1100', '0b1']
[bin(i) for i in np.bitwise_or(a, b)] # ['0b1110', '0b1100', '0b1110', '0b1101']  

3.比较逻辑运算:

1.逻辑运算a = np.array([1, 1, 0, 0], dtype=bool)
b = np.array([4, 0, 2.5, 0])np.logical_or(a, b) # array([ True, True, True, False], dtype=bool)
np.logical_and(a, b) # array([ True, False, False, False], dtype=bool)2.元素比较 # 返回bool数组 运算符(==, <,>,<=,> =,!=)a = np.arange(5) # array([0, 1, 2, 3, 4])
b = np.arange(4,-1,-1) # array([4, 3, 2, 1, 0])# 1).元素比较:
a == b # array([False, False, True, False, False])
a >= b # array([False, False, True, True, True])np.logical_and(a>=2,b<2) # array([False, False, False, True, True])
(a>=2) & (b<2) # array([False, False, False, True, True])np.logical_or(a>=2,b<2) # array([False, False, True, True, True])
(a>=2) | (b<2) # array([False, False, True, True, True])# 2).数组比较:不能用and、or和not(用于标量)a==b and a>b # 抛出ValueError异常np.array_equal([1, 2], [1, 2])# True 数组相等判断
np.array_equiv([1, 2], [1, 2])# True 数组等价判断# all检查数组中所有值都是True,也能用于非布尔型数组
np.all(b) # False
np.all(a==b) # False
((a <= b) & (b != 5)).all() # False# any测试数组中至少存在一个非0元素=True
b.any() # True
np.any((a <= b) & (b != 5)) # True
np.any([True, True, False]) # Truenp.any(a==b) and np.any(a>b) # True # 3).布尔型数组: # 统计Ture值数量
(a < b).sum() # 在运算中bool值被强制转换为1 (True) 和0(False)

4.其他:

# 1.转置:
a = np.triu(np.ones((3, 3)), 1) # array([[ 0., 1., 1.], [ 0., 0., 1.],[ 0., 0., 0.]])
a.T # array([[ 0., 0., 0.], [ 1., 0., 0.], [ 1., 1., 0.]])'# 2.广播
a = np.arange(0, 40, 10)
a.shape # (4,)
a = a[:, np.newaxis] # adds a new axis -> 2D array
a.shape # (4, 1)
a # array([[ 0],[10],[20],[30]])
a + b # array([[ 0, 1, 2],[10, 11, 12], [20, 21, 22],[30, 31, 32]]) 
5.应用:利用数组进行数据处理 
1).说明:
# 1)NumPy数组使你可以将许多种数据处理任务表述为简洁的数组表达式(否则需编写循环)
# 2)用数组表达式代替循环的做法通常被称为矢量化。
# 3)一般来说,矢量化数组运算要比等价的纯Python方式快上一两个数量级。
# 4)不同大小的数组之闹的运算叫做广播;广播一种专们对矢量化计算的强大手段。2).计算sqrt(x^2 + y^2 )x = np.arange(1, 4) # array([1, 2, 3])
x1, x2 = np.meshgrid(x, x+10) # [x,x+5]
x1 # array([[1, 2, 3],[1, 2, 3],[1, 2, 3]])
x2 # array([[11, 11, 11],[12, 12, 12],[13, 13, 13]])
z = np.sqrt(x1 * 10+1 + x2 * 2-8)
np.around(z,decimals=1) # array([[5.,5.9,6.7],[5.2,6.1,6.9], [5.4, 6.2, 7. ]]) 
3).将条件逻辑表述为数组:
# np.where 是表达式x if condition else y的矢量化版本# 示例1:根据条件选取x和y的值:
x = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
y = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array( [True, False, True, True, False])# 1).列表推导式实现:
result= [ ( x1 if c1 else y1 ) for x1, y1, c1 in zip(x, y, cond)]# 结果同下
# 大数组处理速度不快;不能用多维数组。
# 2)使用np.where :
result = np.where(cond, x, y) # [1.1, 2.2, 1.3, 1.4, 2.5]# 示例2: 随机数当数据为正时设为2,为负时设为-2
arr= np.random.randn(4, 4)
np.where(arr>0,2, np.where(arr<0,-2,arr) )  
4). for循环改写成嵌套where表达式: 
# 示例1:根据bool数组cond1和cond2组合实现不同的赋值result = [ ]
cond1=np.array([True,False])
cond2=np.array([False,True])#1)for 语句
for i in range(2):
if cond1[i] and cond2[i]:
result.append(0)
elif cond1[i]:
result . append(1)
elif cond2[i]:
result.append(2)
else:
result.append(3)result#[1, 2]#2)where 语句-传递给where数组大小可相等,可是标量值
np.where(cond1 & cond2,0,np.where(cond1,1,np.where(cond2,2,3)))# array([1, 2])===================================================================== =========== 
  函数 说明
  abs, fabs 整数, 浮点数或复数绝对值 。非复数值fabs更快
  sqrt 计算各元素平方根 。ar r ** 0.5
  squa re 计算各元素平方。arr ** 2
  exp 计算各元素指数e^x
  log, log10, log2, lg1p 自然对数 (e ), 对数 (底数e,10,21+x )
  sign  各元素的正负号 :1 ( 正数), 0 ( 零) , ( 负数) 
  ceil 计算各元素ceiling值 ,即大于等于该值的最小整数
  floor 计算各元素floor值 ,即小于等于该值的最大整数  
  rint 将各元素值四舍五入到最接近的整数 ,保留dtype 
  modf  将数组小数和整数部分以两个独立数组的形式返回
  isnan 返回一个表示哪些值是NaN(不是数字) 的布尔型数组
  isfinite 返 回一个表示哪些元素是有穷  (非inf ,非NaN )的布尔型数组 
  isinf 返 回一个表示哪些元素是无穷的布尔型数组 
  cos ,cosh ,sin, sinh,tan,tanh 普通型和双曲型三角函数
  arccos, a rccosh, aresin, 反三角函数
  arcsinh, arctan, arctanh   反三角函数
  logical_ not                         计算各元素not x的真值。相当于- arr
  二元ufunc函数  
  add 数组中对应元素相加
  subtract  数组中对应元素相减
  multiply 数组元素相乘
  divide 除法
  floor_divide 向下取整除法 (丢弃余数)
  power a^b
  maximum,fmax 元素级最大值计算。fmax将忽略NaN 
  minimum,fmin 元素级最小值计算 。fmin将忽略NaN
  mod 元素级求模计算 ( 除法的余数)
  copysign 将第二个数组中值符号复制给第一个数组中的值
  greater,greater_equal, less, 执行元素级的比较运算 最终产生布尔型数组。
  less_equal, equal,not  equal >,>=,<,<=,==,!=
  logical_and,logical_or,logical_xor 执行元素级真值逻辑运算。相当于&| ^

numpy 学习汇总18.2 - 数学运算( 基础学习 tcy)相关推荐

  1. matlab数学运算规则,matlab数学运算基础

    matlab数学运算基础 MATLAB 数学运算基础 1/10 MATLAB 数学运算基础 目录 1 数据表示方法 2 矩阵的赋值 3 向量的赋值 4 用矩阵元素组成新矩阵 附:矩阵赋值中的标点符号 ...

  2. 零基础学习python入门书_零基础学习Python不可错过的5本书籍

    原标题:零基础学习Python不可错过的5本书籍 Python作为目前编程开发的主流语言之一,在企业中的应用范围越来越广,广阔的发展前景吸引了很多小伙伴想要入行Python,下面小U就为大家介绍一下零 ...

  3. 分享一些我个人学习Python的一些学习建议(附Python零基础学习资料)

    Python是1991年推出,是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,诞生之初定位是面向给系统管理,科研,教育和非程序员群体等使用的: 相比较其他语言,Python有简单易学. ...

  4. numpy 学习汇总18 - 数学运算 (集合,复数)( 基础学习 tcy)

    集合运算 2018/11/11 1.np.unique 唯一值 # 它用干找出数组中的唯一值并返回已排序的结果names= np.array( [ 'Bob','Joe ',' Will', ' Bo ...

  5. python学习之给小学生数学运算题(混合加减乘除法)

    python代码随机生成加减乘除混合运算题,给熊孩子练习很不错哦!!! 寒假在家不能让他闲着,熊孩子的计算能力一如既往的差,学渣老爹继续根据学习进度自动生成寒假作业.不多说了,直接上代码,本着能用就好 ...

  6. 蒙特卡罗MCNP学习汇总(二)--几何体基础,构建几何体

    目录 MCNP几何体基本概念 详细介绍 常用几种面 程序 讲解 现象 MCNP几何体基本概念 空间可以划分为不同材料和性质的区域 几何模型必须包括一个无穷空间的任何部分 基本的几何体单元为Cell 所 ...

  7. MATLAB的数学运算基础

    1.MATLAB的变量 2.MATLAB的运算符号 3.MATLAB的标点符号 4.MATLAB的数学函数 5.MATLAB的语句形式 6.MATLAB的数值显示格式 7.命令窗常用控制命令 8.Ma ...

  8. 学习R语言:数学运算与模拟

    本文内容来自<R 语言编程艺术>(The Art of R Programming),有部分修改 R 内置很多数学函数和统计分布函数. 数学函数 exp() log() log10() s ...

  9. Datawhale--组队学习第12期--python爬虫基础学习---task0/task1环境配置和网页请求基础

    先修知识:task0(基本类库安装,git,anaconda,文本处理) Task0(前置):需要自己安装有关环境,学习git(b站),下载有关driver Chromedriver 作用 驱动浏览器 ...

最新文章

  1. (转载)netstat -r查看路由表时Flags的含义
  2. boost中的shared_ptr的一些理解
  3. allegro怎么设置孔的属性_两种在Allegro中增加过孔的方法
  4. 内核级利用通用Hook函数方法检测进程
  5. 【kafka】Kafka coordinator coordinator 原理剖析
  6. 任正非谈鸿蒙系统问题不大,任正非谈鸿蒙系统:两三年重建生态,有信心打造全球生态...
  7. this指向_前端必须知道的this指向问题
  8. Win_server_2012如何将“计算机”图标放在桌面
  9. 【面试题】---前端需要掌握的知识点-----更新...
  10. 你的第一个java_【JAVA SE基础篇】3.你的第一个JAVA程序
  11. getSelectionStart() doesn't work in android, is always 0
  12. macbook视频格式转换_如何将Mac视频格式转换
  13. 基于 go-cqhttp 开发的 SSPU的QQ机器人小助手
  14. Error running ‘Tomcat8.5‘ port out of range-1 (moments ago)
  15. Symbian学习笔记(22) - 关于皮肤的小结
  16. elementUI el-upload使用方法、上传限制数量且超出不显示上传按钮、删除闪一下、多个upload并排显示
  17. rap格式鸿蒙,你,想要成为rap star吗?
  18. 科目二学车经验(手动挡C1)
  19. 5_ARM Cortex-M汇编
  20. CentOS下连VisualSVN服务器时报SSL handshake failed: SSL error: Key usage violation in certificate has been d

热门文章

  1. 墨画子卿第四章第3节:金光洞
  2. 游戏音效有哪些分类你知道吗
  3. Linux系统学习笔记二
  4. JDBC查询数据库时出现 sql语句正确,但是查询英文可以,汉字不行的情况解决办法
  5. 【Java-IO】File、搜索删除剪切、字符集、字符编码、字节流、将内存中的数据写入文件、字符流、缓冲流、Scanner、格式化输出、数据流、对象流、序列化与反序列化、Files工具类
  6. vim插入模式小技巧
  7. 问题 C: Cly的三角形
  8. 经典回顾:福禄克FLUKE DTX-1800如何配合DTX-LABA测试6A,7类跳线patchcord
  9. (学习力+思考力) x 行动力,技术人成长的飞轮效应总结
  10. java跳格子不同跳发_(算法)跳格子