数组的四则运算

在numpy模块中,实现四则运算的计算既可以使用运算符号,也可以使用函数,具体如下例所示:

#加法运算

import numpy as np
math = np.array([98,83,86,92,67,82])
english = np.array([68,74,66,82,75,89])
chinese = np.array([92,83,76,85,87,77])
tot_symbol = math+english+chinese
tot_fun = np.add(np.add(math,english),chinese) #add 加法
print('符号加法:\n',tot_symbol)
print('函数加法:\n',tot_fun)

#除法
height = np.array([165,177,158,169,173])
weight = np.array([62,73,59,72,80])
BMI_symbol = weight/(height/100)**2
BMI_fun = np.divide(weight,np.divide(height,100)**2) #divide 除法
print('符号除法:\n',BMI_symbol)
print('函数除法:\n',BMI_fun)

out:

符号加法:
[258 240 228 259 229 248]
函数加法:
[258 240 228 259 229 248]
符号除法:
[22.77318641 23.30109483 23.63403301 25.20920136 26.7299275 ]
函数除法:
[22.77318641 23.30109483 23.63403301 25.20920136 26.7299275 ]

四则运算中的符号分别是“+-*/”,对应的numpy模块函数分别是np.add np.subtract,np.multiply,np.divide.需要注意的是,函数只能接受两个对象的运算,如果需要多个对象的运算,就得使用嵌套方法。如上所示的符号假发和符号的除法。不管是符号方法还是函数方法,都必须保证操作的数组具有相同的形状,除了数组与标量之间的运算(如除法中的身高与100的商)。另外,还有三个数学运算符,分别是余数,整数和指数:

import numpy as np
arr7 = np.array([[1,2,10],[10,8,3],[7,6,5]])
arr8 = np.array([[2,2,2],[3,3,4],[4,4,4]])
print('数组arr7:\n',arr7)
print('数组arr8:\n',arr8)
print('求余计算:\n',arr7 % arr8)
print('整除:\n',arr7 // arr8)    #这里面要注意的就是  整除的时候 是  “//”而不是 "/"
print('计算指数:\n',arr7 ** arr8)

out:

数组arr7:
[[ 1 2 10]
[10 8 3]
[ 7 6 5]]
数组arr8:
[[2 2 2]
[3 3 4]
[4 4 4]]
求余计算:
[[1 0 0]
[1 2 3]
[3 2 1]]
整除:
[[0 1 5]
[3 2 0]
[1 1 1]]
计算指数:
[[ 1 4 100]
[1000 512 81]
[2401 1296 625]]

另外还可以使用np.fmod,np.modf和np.power,但是整除的函数应用会稍微复杂一点,需要写成np.modf(arr7/arr8)[1],因为modf可以返回

数值的小数部分和整数部分,而整数部分就是要取的整除值。

比较运算

处理数组的元素之间可以实现上面提到的数学运算,还可以做元素的比较运算。关于比较运算符如下:

符号 函数 含义
> np.greater(arr1,arr2) 判断arr1的元素是否大于arr2的元素
>= np.greater_equal(arr1,arr2) 判断arr1的元素是否大于等于arr2的元素
< np.less(arr1,arr2) 判断arr1的元素是否小于arr2的元素
<= np.less_equal(arr1,arr2) 判断arr1的元素是否小于等于arr2的元素
== np.equal(arr1,arr2) 判断arr1的元素是否等于arr2的元素
!= np.not_equal(arr1,arr2) 判断arr1的元素是否小等于arr2的元素
     

运用比较运算符可以返回bool类型的值,即True和False。有两种情况会普遍使用到比较运算符,一个是从数组中查询满足条件的元素,另一个是根据判断的结果执行不同的操作。例如:

import numpy as np
arr7 = np.array([[1,2,10],[10,8,3],[7,6,5]])
arr8 = np.array([[2,2,2],[3,3,2],[4,4,4]])
print(arr7)
print('从arr7中取出所有大于arr8的元素',arr7[arr7>arr8])    #取出的是所有arr7中对应的元素大于arr8中对应位置的元素
arr9 = np.array([3,10,23,7,15,9,17,22,4,8,16])
print('取出arr9中所有大于10的元素',arr9[arr9>10])   #得到的是一个一维数组  相当于每个数组中的元素都会跟10来进行比较

print(np.greater(arr7,arr8)) #输出的是原数组结构的布尔型元素的数组

out:

[[ 1  2 10]
[10 8 3]
[ 7 6 5]]
从arr7中取出所有大于arr8的元素 [10 10 8 3 7 6 5]
取出arr9中所有大于10的元素 [23 15 17 22 16]
[[False False True]
[ True True True]
[ True True True]]

广播运算

上面介绍的是相同形状的数组,当数组形状不同时,也能够进行数学运算的功能成为数组的广播。数组的广播是有规则的,如果不满足这些规则就会出错;规则如下:

a.各输入数组的维度可以不相等,但必须确保从右到左维度值相等。

b.如果对应维度值不相等,就必须保证其中一个为1.

c.各输入数组都向其shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐

下面通过实例来加强理解

import numpy as np
arr10 = np.arange(12).reshape(3,4)                             #arange(12)表示生成从0-11总共12个数组元素组成的数组,然后通过reshape编                                                                                          #成3行4列的二维数组
arr11 = np.arange(101,113).reshape(3,4)                    #同上面arange(101,113)就是生成从 101到112的元素的数组
print('3x4的二维矩阵运算:\n',arr10 + arr11)
arr12 = np.arange(60).reshape(5,4,3)                          #这是个三维数组,我们可以理解为一个长5宽为4高为3的魔方
arr10 = np.arange(12).reshape(4,3)                             #4行3列的二维数组
print('维数不一致,但末尾的维度值一致:\n',arr12 + arr10)               #我们可以这么看,reshape(5,4,3)其实里面相当于包含了 5个                                                                                                                           #reshape(4,3)的二维数组,末尾两个维度相同,可以进行运算
arr12 = np.arange(60).reshape(5,4,3)
arr13 = np.arange(4).reshape(4,1)                                #这个里面末尾的维度虽然一个是‘’4,3‘’,一个是“4,1”因为后面的数组末尾维度                                                                                           #中其中一个是‘’1‘’,所以是可以进行运算的
print('维数不一致,维数值也不一致,但维度值至少一个为1:\n',arr12+arr13)              #就是在5个(4行3列)的数组中,每行的各个元素对                                                                                                                                          #应加0,1,2,3
arr14 = np.array([5,15,25])
print('arr14的维度自动补齐为(1,3): \n',arr10 + arr14)                                   #每行对应位置元素分别加上 5,15,25

out:

3x4的二维矩阵运算:
[[101 103 105 107]
[109 111 113 115]
[117 119 121 123]]
维数不一致,但末尾的维度值一致:
[[[ 0 2 4]
[ 6 8 10]
[12 14 16]
[18 20 22]] [[12 14 16]
[18 20 22]
[24 26 28]
[30 32 34]] [[24 26 28]
[30 32 34]
[36 38 40]
[42 44 46]] [[36 38 40]
[42 44 46]
[48 50 52]
[54 56 58]] [[48 50 52]
[54 56 58]
[60 62 64]
[66 68 70]]]
维数不一致,维数值也不一致,但维度值至少一个为1:
[[[ 0 1 2]
[ 4 5 6]
[ 8 9 10]
[12 13 14]] [[12 13 14]
[16 17 18]
[20 21 22]
[24 25 26]] [[24 25 26]
[28 29 30]
[32 33 34]
[36 37 38]] [[36 37 38]
[40 41 42]
[44 45 46]
[48 49 50]] [[48 49 50]
[52 53 54]
[56 57 58]
[60 61 62]]]
arr14的维度自动补齐为(1,3):
[[ 5 16 27]
[ 8 19 30]
[11 22 33]
[14 25 36]]

以上的操作,根据备注去理解,平时多维数组方面的应用比较少,能理解这些规则是怎么来的就可以了,需要用到的时候再深究。

python numpy数组操作2的更多相关文章

  1. python numpy数组操作

    数组的创建 import numpy as np arr1 = np.array([3,10,8,7,34,11,28,72]) arr2 = np.array(((8.5,6,4.1,2,0.7), ...

  2. Numpy 数组操作

    Numpy 数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resh ...

  3. Numpy数组操作

    """ Numpy 数组操作 修改数组形状 函数 描述 reshape 不改变数据的条件下修改形状 flat 数组元素迭代器 flatten 返回一份数组拷贝,对拷贝所做 ...

  4. python numpy 数组拼接

    我就写一下我遇到的,更多具体的请看Python之Numpy数组拼接,组合,连接 >>> aarray([0, 1, 2],       [3, 4, 5],       [6, 7, ...

  5. Python Numpy线性代数操作

    Python Numpy线性代数函数操作 1.使用dot计算矩阵乘法 import numpy as np from numpy import ones from __builtin__ import ...

  6. Python+OpenCV图像处理(三)—— Numpy数组操作图片

    一.改变图片每个像素点每个通道的灰度值 (一) 代码如下: #遍历访问图片每个像素点,并修改相应的RGB import cv2 as cv def access_pixels(image): prin ...

  7. Python Numpy 数组的初始化和基本操作

    一.基础: Numpy的主要数据类型是ndarray,即多维数组.它有以下几个属性: ndarray.ndim:数组的维数 ndarray.shape:数组每一维的大小 ndarray.size:数组 ...

  8. 9、numpy——数组操作

    Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: (1)修改数组形状 (2)翻转数组 (3)修改数组维度 (4)连接数组 (5)分割数组 (6)数组元素的添加与删除 1.修改数组形状 函 ...

  9. 吴裕雄--天生自然Numpy库学习笔记:Numpy 数组操作

    import numpy as np a = np.arange(8) print ('原始数组:') print (a) print ('\n') b = a.reshape(4,2) print ...

随机推荐

  1. PHP系列之钩子

    PHP 提供的钩子 PHP 和 Zend Engine 为扩展提供了许多不同的钩子,这些扩展允许扩展开发人员以 PHP userland 无法提供的方式控制 PHP 运行时. 本章将展示各种钩子和从扩 ...

  2. PHP preg_split() 函数

    preg_replace 函数通过一个正则表达式分隔字符串.高佣联盟 www.cgewang.com 语法 array preg_split ( string $pattern , string $s ...

  3. 探究:编程语言那么多,为什么偏偏是 C 语言成了大学的必修课?

    谁叫你不幸生在中国了? ——何祚庥(中国科学院院士) 这是一本给非计算机专业的大学生的C语言的书.“我不是学计算机的,为啥要学C语言?”这个问题每年在中华大地都会被问上几百万次.被问的对象可能是老师, ...

  4. luogu P4798 [CEOI2015 Day1]卡尔文球锦标赛 dp 数位dp

    LINK:卡尔文球锦标赛 可以先思考一下合法的序列长什么样子. 可以发现后面的选手可以使用前面出现的编号也可以直接自己新建一个队. 其实有在任意时刻i 序列的mex>max.即要其前缀子序列中1 ...

  5. SparkSQL JDBC和JDBCServer区别

    注意SparkSQL JDBC和SparkSQL JDBCSever是完全两种不同的场景. SparkSQL JDBC SparkSQL可以使用JDBC的方式访问其他数据库,和普通非spark程序访问 ...

  6. javaweb 测试

    题目要求: 1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分) 2登录密码:要求显示“• ”或“*”表示输入位数,密码要求八位以上字母.数字组成.(1分) 3性别:要求用单 ...

  7. Java 多态 接口继承等学习笔记

    Super关键字 1.子类可以调用父类声明的构造方法 : 语法:在子类的构造方法中使用super关键字  super(参数列表) 2.操作被隐藏的成员变量(子类的成员变量和父类的成员变量重名的说法)和 ...

  8. 19c新环境安装补丁(三)_推荐

    本次安装Oracle RAC 19.3 版本 Linux red-hat 7.8  DB安装补丁  RUR 20200717. 本次安装Oracle补丁的方法类似于11G RAC打补丁的方法.  [可 ...

  9. 基于小程序云Serverless开发微信小程序

    本文主要以使用小程序云Serverless服务开发一个记事本微信小程序为例介绍如何使用小程序云Serverless开发微信小程序.记事本小程序的开发涉及到云函数调用.云数据库存储.图片存储等功能,较好 ...

  10. C# NPOI计算Execl里面的公式

    我这里分两种情况处理 1.Execl中表格中存在公式,我们通过公式获取数据 我们通过Npoi,获取列的属性: private static object GetValueType(ICell cell ...