python numpy数组操作2
数组的四则运算
在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的更多相关文章
- 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), ...
- Numpy 数组操作
Numpy 数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resh ...
- Numpy数组操作
""" Numpy 数组操作 修改数组形状 函数 描述 reshape 不改变数据的条件下修改形状 flat 数组元素迭代器 flatten 返回一份数组拷贝,对拷贝所做 ...
- python numpy 数组拼接
我就写一下我遇到的,更多具体的请看Python之Numpy数组拼接,组合,连接 >>> aarray([0, 1, 2], [3, 4, 5], [6, 7, ...
- Python Numpy线性代数操作
Python Numpy线性代数函数操作 1.使用dot计算矩阵乘法 import numpy as np from numpy import ones from __builtin__ import ...
- Python+OpenCV图像处理(三)—— Numpy数组操作图片
一.改变图片每个像素点每个通道的灰度值 (一) 代码如下: #遍历访问图片每个像素点,并修改相应的RGB import cv2 as cv def access_pixels(image): prin ...
- Python Numpy 数组的初始化和基本操作
一.基础: Numpy的主要数据类型是ndarray,即多维数组.它有以下几个属性: ndarray.ndim:数组的维数 ndarray.shape:数组每一维的大小 ndarray.size:数组 ...
- 9、numpy——数组操作
Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: (1)修改数组形状 (2)翻转数组 (3)修改数组维度 (4)连接数组 (5)分割数组 (6)数组元素的添加与删除 1.修改数组形状 函 ...
- 吴裕雄--天生自然Numpy库学习笔记:Numpy 数组操作
import numpy as np a = np.arange(8) print ('原始数组:') print (a) print ('\n') b = a.reshape(4,2) print ...
随机推荐
- 10-Pandas之数据融合(pd.merge()、df.join()、df.combine_first()详解)
一.pd.merge() pd.merge()的常用参数 参数 说明 left 参与合并的左侧DataFrame right 参与合并的右侧DataFrame how 如何合并.值为{'left',' ...
- PHP wordwrap() 函数
实例 按照指定长度对字符串进行折行处理: <?php高佣联盟 www.cgewang.com$str = "An example of a long word is: Supercal ...
- CF321E Ciel and Gondolas Wqs二分 四边形不等式优化dp 决策单调性
LINK:CF321E Ciel and Gondolas 很少遇到这么有意思的题目了.虽然很套路.. 容易想到dp \(f_{i,j}\)表示前i段分了j段的最小值 转移需要维护一个\(cost(i ...
- 4.13 省选模拟赛 传销组织 bitset 强连通分量 分块
考试的时候昏了头 没算空间 这道题我爆零了.值得注意的是 一般认为bitset的空间是 int 的1/w倍 对于那m条边 无论如何构造 这m条关系都是存在的 题目其实是想让我们用这m条关系来计算给出的 ...
- 学习JDBC这一篇就够了
配套资料,免费下载 链接: https://pan.baidu.com/s/1CKiwCbQV4FGg_4YMQoebkg 提取码: 7cn3 复制这段内容后打开百度网盘手机App,操作更方便哦 第一 ...
- Python爬取10000条“爆款剧”——《三十而已》热评,并做可视化
前言 继<隐秘的角落>后,又一部“爆款剧”——<三十而已>获得了口碑收视双丰收,王漫妮.顾佳.钟晓芹三个女主角的故事线频频登上微博热搜.该剧于2020年7月17日在东方卫视首播 ...
- 【NOIP2017】跳房子 题解(单调队列优化线性DP)
前言:把鸽了1个月的博客补上 ----------------- 题目链接 题目大意:机器人的灵敏性为$d$.每次可以花费$g$个金币来改造机器人,那么机器人向右跳的范围为$[min(d-g,1),m ...
- 12、Decorator 装饰器 模式 装饰起来美美哒 结构型设计模式
1.Decorator模式 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式(Decorator Pattern)允许向一个现 ...
- Q#–一个新年愿望清单
本文章为机器翻译.https://blogs.msdn.microsoft.com/visualstudio/2018/12/24/qsharp-wish-list-for-new-year/# 在以 ...
- C#LeetCode刷题之#383-赎金信(Ransom Note)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3937 访问. 给定一个赎金信 (ransom) 字符串和一个杂志 ...