NumPy使用教程(三)面向数组编程
2019-05-04 17:46
127 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/FlashKoala/article/details/89815929
常用数组函数 矩阵运算 总结
NumPy - 面向数组编程 目录树
NumPy使用教程(三)面向数组编程
来自http://www.tpleina.com/2019/05/3281302163.html
面向数组编程
NumPy数组通过简单的数组表达式完成多种数据操作任务,数组表达式代替循环的方法称之为向量化
numpy.where
numpy.where函数是三目运算
x if condition else y的数组版
使用示例
条件+数组+数组形式
import numpy as np arr1 = np.random.randn(6) arr2 = np.random.randn(6) cond = np.array([True,True,True,False,False,False]) print(arr1) print(arr2) arr3 = np.where(cond, arr1, arr2) print(arr3) # 输出 [ 1.27341434 0.98277035 -0.37508696 -0.10692764 0.61461728 -0.49524537] [-0.17197977 -1.54415347 2.10698458 -0.59802743 -0.39001325 1.29582979] [ 1.27341434 0.98277035 -0.37508696 -0.59802743 -0.39001325 1.29582979]
条件+标量+数组形式
import numpy as np arr = np.random.randint(-50,50,(4,5)) print(arr) t_num = 10 arr1 = np.where(arr>0, t_num, arr) print(arr1) # 输出 [[-17 29 -39 -42 28] [ 32 33 49 22 47] [-22 -36 10 11 24] [ 30 -29 -1 40 -27]] [[-17 10 -39 -42 10] [ 10 10 10 10 10] [-22 -36 10 10 10] [ 10 -29 -1 10 -27]]
条件+标量+标量形式
import numpy as np arr = np.random.randint(-50,50,(4,5)) print(arr) t_num = 10 f_num = -10 arr1 = np.where(arr>0, t_num, f_num) print(arr1) # 输出 [[ 18 47 -16 -50 31] [ 34 -39 38 -47 -41] [ 4 -20 41 37 23] [-15 -48 12 -32 -34]] [[ 10 10 -10 -10 10] [ 10 -10 10 -10 -10] [ 10 -10 10 10 10] [-10 -10 10 -10 -10]]
数组统计函数
sum
沿着轴向,计算所有元素累积和mean
算数平均数std
、var
标准差、方差min
、max
最大值、最小值argmin
、argmax
最大和最小元素的位置cumsum
从0开始元素累积和cumprod
从1开始元素累积和
以上方法都可传入axis参数,表示某个轴线方向操作:0轴表示行,1轴表示列
数组统计函数使用示例
import numpy as np arr1d = np.random.randint(1,50,10) arr2d = np.random.randint(1,50,(4,5)) print(arr1d.sum()) print(arr2d) # 行的累积和 print(arr2d.sum(axis=1)) # 列的累积和 print(arr2d.sum(axis=0)) # 所有元素累积和 print(arr2d.sum()) # 行的平均值 print(arr2d.mean(axis=1)) # 列的平均值 print(arr2d.mean(axis=0)) # 所有元素平均值 print(arr2d.mean()) # 行的最大值 print(arr2d.max(axis=1)) # 列的最大值 print(arr2d.max(axis=0)) # 所有元素最大值 print(arr2d.max()) # 行的最大位置 print(arr2d.argmax(axis=1)) # 列的最大位置 print(arr2d.argmax(axis=0)) # 所有元素最大位置 print(arr2d.argmax())
排序
数组通过
np.sort实现对数组的排序
import numpy as np a1 = np.floor(10*np.random.random((4,4))) print a1 # 按照行维度排序 a1.sort(axis=1) np.sort(a1, axis=1) print a1 # 按照列维度排序 a1.sort(axis=0) np.sort(a1, axis=0) print a1
针对多维数组,可传入axis参数,按照某个轴线方向排序:0轴表示行,1轴表示列
布尔数组使用
布尔值会被强制转换为1(True)和0(False),因此sum可以统计布尔数组中True的个数
import numpy as np arr = np.random.randn(100) # 统计正数的个数 res = (arr>0).sum() print(res)
np.any
检查数组至少有一个Truenp.all
检查数组每个元素都为True
import numpy as np arr = np.random.randint(-50,50,10) arr1 = arr>0 print(arr1) print(arr1.any()) print(arr1.all())
数组唯一值
unique(x)
计算x中的唯一元素,并返回有序结果intersect1d(x, y)
计算x和y的公共元素,并返回有序结果union1d(x, y)
计算x和y的并集,并返回有序结果in1d(x, y)
得到一个表示x的元素是否包含于y的布尔数组setdiff1d(x, y)
集合的差,即元素在x中且不在setxor1d(x, y)
集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素
arr = np.array([3, 3, 2, 2, 1, 1, 4]) # 消重、排序输出 >>np.unique(arr) array([1, 2, 3, 4]) # 等价于 >> sorted(set(arr)) array([1, 2, 3, 4]) # np.in1d 数组arr那些元素存在于第二个数组中,并返回布尔数组 >> np.in1d(arr, [2, 3, 6]) array([True, True, True, True, False, False, False])
常用数组函数
常用函数能对ndarray对象逐元素扫描操作
一元函数,接收一个参数,并返回一个数组结果。有:
abs
、fabs
计算数组元素绝对值sqrt
计算数组元素平方根square
计算数组元素平方exp
计算数组元素指数log
、log10
、log2
、log1p
分别为自然对数(底数为e)、底数为10的log、底数为2的log、log(1+x)sign
计算数组元素正负号ceil
计算数组元素ceiling值,即大于等于该值的最小整数floor
计算数组元素floor值,即小于等于该值的最大整数rint
计算数组元素值四舍五入到最接近的modf
将数组的小数和整数部分以两个独立的数组形式返回isnan
“哪些值是NaN” 返回布尔值isfinite
、isinf
“哪些元素是有穷的” “哪些元素是无穷的”cos
、cosh
、sin
、sinh
、tan
、tanh
普通型和双曲型三角函数arccos
、arccosh
、arcsin
、arcsinh
、arctan
、arctanh
反三角函数
二元函数,接收两个参数,并返回一个数组结果。有:
add
两个数组对应元素相加subtract
两个数组对应元素做减法multiply
数组元素相乘divide
、floor_divide
数组元素整除power
数组元素的n次方maximum
、fmax
获取数组元素最大值,fmax将忽略nanminimum
、fmin
获取数组元素最小值,fmin将忽略nanmod
元素级的求模计算copysign
将第一个数组的符号值改为第二个数组的符号值greater
、greater_equal
、less
、less_equal
、equal
、not_equal
数组元素比较运算,产生布尔型数组logical_and
、logical_or
、logical_xor
数组元素元素间与或运算
同时数组函数都可接受一个可选参数out,用于对数组进行按位操作
矩阵运算
首先说一下什么是矩阵,矩阵是数组的一个子集,数组可以有多维,一维、二维、三维、多维等,其中二维数组被称为矩阵
矩阵计算函数有:
- diag 将一个方阵的对角元素作为一维数组返回,或将一维数组转换成一个方阵,并且在非对角线为0点
- dot 矩阵点乘
- trace 计算对角线元素和
- det 计算矩阵行列式
- eig 计算方阵的特征值和特征向量
- inv 计算方阵的逆矩阵
- pinv 计算矩阵的Moore-Penrose伪逆
- qr 计算QR分解
- svd 计算奇异值分解(SVD)
- solve 解线性方程组Ax = b, 其中A为一个方阵
- lstsq 计算Ax = b的最小二乘解
额外说一下:矩阵点乘 使用
np.dot实现的,而运算符
*是对数组逐元素乘积,千万不要跟矩阵点乘搞混!
总结
本节主要介绍NumPy 面向数组编程内容,涉及到NumPy大量函数,针对这些函数的使用额外补充一点:
除了可以这样
arr.func调用函数,也可以通过
numpy.func方式调用NumPy提供的函数!
相关文章推荐
- numpy使用教程之数组的创建与遍历
- 教程|使用数组进行数组编程(下)
- 教程|使用数组进行数组编程(上)
- 【翻译】MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API
- MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API
- NumPy简明教程(二、数组1)
- ◎Vbs脚本编程简明教程之十三 —使用dictionary对象
- 一起谈.NET技术,使用WCF实现SOA面向服务编程——使用AJAX+WCF服务页面开发
- 使用WCF实现SOA面向服务编程—— 架构设计
- numpy教程 - 基本数据类型、多维数组ndarray及其切片操作
- ruby 数组使用教程
- Mootools 1.2教程(3) 数组使用简介
- 一起谈.NET技术,使用WCF实现SOA面向服务编程——简单的WCF开发实例
- java 编程数组的使用
- 入门二:AOP面向方面编程使用
- obj-c编程10:Foundation库中类的使用(2)[字符串,数组]
- 使用WCF实现SOA面向服务编程—— 架构设计
- (***)有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, 如果 B 的元素小于 A 的元素进行数值交换:(使用回调函数实现)
- DirectX5.0最新游戏编程指南 DirectDraw教程篇 四、使用覆盖表面
- 编程典型代码错误举例:关于数组的下标使用