数组的四则运算

在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. html标签集合

    ---恢复内容开始--- 基础 <!DOCTYPE>,<html>,<title>,<body>,<h1>to<h6>,< ...

  2. JAVA实现BP神经网络算法

    工作中需要预测一个过程的时间,就想到了使用BP神经网络来进行预测. 简介 BP神经网络(Back Propagation Neural Network)是一种基于BP算法的人工神经网络,其使用BP算法 ...

  3. mongoose子文档生成不了_id,查询困难的解决办法

    以下是我的数据库表 本来是想设置一个自增属性,比如listId,来定义我的子list,sliderlist这些,这样能确保他的唯一性,结果尝试了很久都无法成功,原生,插件都无法成功, 这两个网址是讲的 ...

  4. PHP curl_strerror函数

    (PHP 5 >= 5.5.0) curl_strerror — 返回错误码的描述. 说明 string curl_strerror ( int $errornum ) 返回错误码的文本描述信息 ...

  5. PDOStatement::fetchColumn

    PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列.(PHP 5 >= 5.1.0, PECL pdo >= 0.9.0)高佣联盟 www.cgewa ...

  6. HA模式下的java api访问要点

    在非HA架构的HDFS中,客户端要通过java接口调用HDFS时一般是在JobRunner的类中按照下面的方式: 因为nodename只有一个节点所以会在代码中显式的指明要连接哪一个节点:但是在HA模 ...

  7. 谈谈Spring中都用到了那些设计模式?

    以下文章来源于微信公众号JavaGuide ,作者:JavaGuide JDK 中用到了那些设计模式?Spring 中用到了那些设计模式?这两个问题,在面试中比较常见.我在网上搜索了一下关于 Spri ...

  8. Flask官方文档学习-flask快速入门

    环境搭建 下载安装Python3:www.python.org 终端运行命令:python3 -m venv flask_dev,来创建虚拟环境 启用虚拟环境,终端使用命令 source /flask ...

  9. docker 启动redis 报错!

    首先通过命令进入: docker  exec -it ‘容器名’  redis-cli 错误信息: There was an unexpected error (type=Internal Serve ...

  10. 详解GaussDB(for MySQL)服务:复制策略与可用性分析

    摘要:本文通过介绍GaussDB(for MySQL)读写路径,分析其可用性. 简介 数据持久性和服务可用性是数据库服务的关键特征. 在实践中,通常认为拥有 3 份数据副本,就足以保证持久性. 但是 ...