numpy 学习汇总5-数组运算 tcy
发布日期:2021-06-29 14:46:33 浏览次数:2 分类:技术文章

本文共 5365 字,大约阅读时间需要 17 分钟。

2.1.运算 2018/11/11===================================================================1.算术运算 #+ - * /#都按元素运算使用标量:数组与标量的算术运算也会将标量值传播到各个元素a = np.array([1, 2, 3, 4])a + 1 # array([2, 3, 4, 5])2 ** j #array([1, 2, 4, 8, 16], dtype=int32)c = np.ones((3, 3)) #数组乘法不是矩阵乘法:c * c #普通数组乘法c.dot(c) # 矩阵乘法====================================================================2.函数运算:2.1.通用函数ufunc:#快速元素级数组函数#对ndarray 数组中元素单独运算,接受标量值,产生一或多个标量值的矢盐化包装器。---------------------------------------------------# 2.1.1.一元函数:arr= np.arange(5)np.log(a) # array([-inf, 0., 0.69314718, 1.09861229, 1.38629436])np.sqrt(arr) #array([ 0. , 1. , 1.4142, 1. 7321 ])---------------------------------------------------# 2.1.2 二元函数:#返回一个结果数组x = randn(8) #array([ 0.0749, 0.0974, 0.2002, -0.2551, 0.4655, 0.9222, 0.446 , -0.9337))y = randn(8 ) #array([ 0.267 , -1.1131, - 0. 3361, o.6117, -1.2323, 0.4788, 0. 4315, -o. 7147])np.maximum(x, y) #元素级最大值#array([ 0.267 , 0.0974, 0.2002, 0.6111, 0.4655, 0.9222, 0.446 , -0.7147])---------------------------------------------------# 2.1.3.返回多个数组。# modf是Python内置函数divmod的矢量化版本,用于浮点数数组的小数和整数部分。arr= randn(7) * 5np.modf(arr) #(array([-0.6808, 0.0636, -0 .386 , 0 . 1393, -0.8806, 0.9363, -o.883 ]),# array([-2., 4., -3-, 5-, -3-, 3-, -6.]))========================================================================2.2.利用数组进行数据处理# 1.2.1.说明:# 1)NumPy数组使你可以将许多种数据处理任务表述为简洁的数组表达式(否则需编写循环)# 2)用数组表达式代替循环的做法通常被称为矢量化。# 3)一般来说,矢量化数组运算要比等价的纯Python方式快上一两个数量级。# 4)不同大小的数组之闹的运算叫做广播;广播一种专们对矢量化计算的强大手段。# 1.2.2.计算sqrt(x^2 + y^2 )x = np.arange(0, 10)x1, x2 = np.meshgrid(x, x+10) #[x,x+10]x1 #array([[0, .., 9],...,[0, .., 9]])#100个数据z = np.sqrt(x1 * 10+1 + x2 * 2-8)np.around(z,decimals=1) #四舍五入array([[ 3.6, 4.8, 4.7, 6.6, 7.3, 7.9, 8.5, 9.1, 9.6, 10.1],...,[ 4.6, 6.4, 7.1, 7.8, 8.4, 9. , 9.5, 10. , 10.5, 11. ]]) #100个数据=========================================================================3.将条件逻辑表述为数组运算# 3.1.numpy.where 函数是三元表达式x if condition else y的矢量化版本。-------------------------------------------------------# 示例1# 根据cond 中的值选取xarr和yarr的值:当cond=True时选xarr的值,否则选yarrxarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])cond = np.array( [True, False, True, True, False])# 1).列表推导式实现:result= [ ( x if c else y ) for x, y, c in zip(xarr, yarr, cond)]# [1.1, 2.2, 1.3, 1.4, 2.5]# 问题:对大数组处理速度不是很快;不能用于多维数组。# 2)使用np.where :result = np.where(cond, xarr, yarr) # [1.1, 2.2, 1.3, 1.4, 2.5]-------------------------------------------------------# 示例2# 随机数当数据为正时设为2,为负时设为-2arr= np.random.randn{4, 4)np.where(arr>0,2, np.where(arr<0,-2,arr) )-------------------------------------------------------# 示例3:# 根据bool数组cond1和cond2组合实现不同的赋值# 传递给where的数组大小可以不相等,甚至可以是标量值。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)for循环改写成嵌套where表达式:np.where(cond1 & cond2,0,np.where(cond1,1,np.where(cond2,2,3)))# array([1, 2])======================================================================4.比较:#4.1.元素比较a = np.array([1, 2, 3, 4])b = np.array([4, 2, 2, 4])a == b # array([False, True, False, True], dtype=bool)a > b # array([False, False, True, False], dtype=bool)------------------------------------------------------------#4.2.数组比较:a = np.array([1, 2, 3, 4])b = np.array([4, 2, 2, 4])c = np.array([1, 2, 3, 4])np.array_equal(a, b) # Falsenp.array_equal(a, c) # True((a <= b) & (b <= c)).all() # falsenp.all([True, True, False]) # Falsenp.any([True, True, False]) # True# 可用于数组比较:a = np.zeros((100, 100))np.any(a != 0) # False-------------------------------------------------------------# 4.3.逻辑运算:a = np.array([1, 1, 0, 0], dtype=bool)b = np.array([1, 0, 1, 0], dtype=bool)np.logical_or(a, b) # array([ True, True, True, False], dtype=bool)np.logical_and(a, b) # array([ True, False, False, False], dtype=bool)==================================================================5..转置:a = np.triu(np.ones((3, 3)), 1) # see help(np.triu)a# array([[ 0., 1., 1.],# [ 0., 0., 1.],# [ 0., 0., 0.]])a.T# array([[ 0., 0., 0.],# [ 1., 0., 0.],# [ 1., 1., 0.]])'''==================================================================6.广播# 如果NumPy可以转换这些数组,以便它们都有相同的大小:这种转换称为广播.a = np.arange(0, 40, 10)a.shape # (4,)a = a[:, np.newaxis] # adds a new axis -> 2D arraya.shape # (4, 1)a# array([[ 0],# [10],# [20],# [30]])a + b# array([[ 0, 1, 2],# [10, 11, 12],# [20, 21, 22],# [30, 31, 32]])===================================================================
7.附录:数学函数
  函数 说明
  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, 执行

转载地址:https://chunyou.blog.csdn.net/article/details/83946306 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:numpy 学习汇总6-统计函数 tcy
下一篇:numpy学习汇总4-花式索引tcy

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月03日 20时52分02秒