原标题:Python连载|Numpy系列(上)
Numpy是使用Python进行科学计算的基础软件包,它提供了高效的大数据数组处理能力和许多线性计算的内置函数,可见其重要性不言而喻。那么本期先给大家介绍一下Numpy的利器–数组及数组运算。
a = np.array([[ 1],[ 2],[ 3]])
b = np.array([[ 1, 2, 3],[ 4, 5, 6],[ 7, 8, 9]])
a + b
其广播过程可以用下图来描述

2.3 自增和自减运算符
当对变量的值进行自增与自减,需要使用+=或-=运算符。当你想修改数组元素的值而不想生成新数组时,就可以使用它们
a = np.arange( 5)
a += 3
print(a) # [3 4 5 6 7]
a -= 2
print(a) # [1 2 3 4 5]
a *= 3
print(a) # [ 3 6 9 12 15]
2.4 唯一化与集合运算
NumPy提供了一些针对一维ndarray的基本集合运算。最常用的就是np.unique了,它用于找出数组中的唯一值并返回已排序的结果。
a = np.array([[ 3, 7, 5, 5, 5, 3, 9, 9]])
# a中的唯一元素
print(np.unique(a)) # [3 5 7 9]
此外,还有如下集合运算函数
函数
描述
intersect1d(x,y)
计算x和y中的公共元素,并返回有序结果
union1d(x,y)
计算x和y的并集,并返回有序结果
in1d(x,y)
得到一个表示“x的元素是否包含于y”的布尔型数组
setdiff1d(x,y)
集合的差,即元素在x中且不在y中
setxor1d(x,y)
集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素
代码演示:
a = np.array([ 3, 8, 4, 6, 8, 5])
b = np.array([ 1, 2, 6, 5, 8])
# a与b的公共元素
print(np.intersect1d(a,b)) # [5 6 8]
# a与b的并集
print(np.union1d(a,b)) # [1 2 3 4 5 6 8]
# a的每个元素是否存在与b中
print(np.in1d(a,b)) # [False True False True True True]
# a与b的差
print(np.setdiff1d(a,b)) # [3 4]
# a与b的对称差
print(np.setxor1d(a,b)) # [1 2 3 4]
3. 矩阵3.1 创建矩阵
一般我们可以通过np.mat或者np.matrix方法来创建矩阵
m = np.mat([[ 1, 2, 3],[ 4, 5, 6]])
print(type(m)) # numpy.matrix
m2 = np.matrix([[ 1, 2, 3],[ 4, 5, 6]])
print(type(m2)) # numpy.matrix
此外,NumPy中包含了一个矩阵库numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。
函数
描述
matlib.empty
返回一个新的矩阵
matlib.zeros
创建一个以 0 填充的矩阵
matlib.ones
创建一个以 1 填充的矩阵
matlib.eye
返回一个对角线元素为 1,其他位置为零的矩阵
matlib.identity
返回给定大小的单位矩阵
matlib.rand
函数创建一个给定大小的矩阵,数据是随机填充的
代码演示:
print( “2*3矩阵:n”,np.matlib.empty(( 2, 3)))
print( “2*3矩阵:n”,np.matlib.zeros(( 2, 3)))
print( “2*3矩阵:n”,np.matlib.ones(( 2, 3)))
print( “3*4矩阵:n”,np.matlib.eye(n = 3, M = 4, k = 0, dtype = float))
print( “大小为 5,类型为浮点型的矩阵:n”,np.matlib.identity( 5, dtype = float))
print( “3*3随机填充数据矩阵:n”,np.matlib.rand( 3, 3))
输出结果
2* 3矩阵:
[[ 4.24399158e-3148.48798317e-3141.27319747e-313]
[ 1.69759663e-3132.12199579e-3132.54639495e-313]]
2* 3矩阵:
[[ 0.0.0.]
[ 0.0.0.]]
2* 3矩阵:
[[ 1.1.1.]
[ 1.1.1.]]
3* 4矩阵:
[[ 1.0.0.0.]
[ 0.1.0.0.]
[ 0.0.1.0.]]
大小为 5,类型为浮点型的矩阵:
[[ 1.0.0.0.0.]
[ 0.1.0.0.0.]
[ 0.0.1.0.0.]
[ 0.0.0.1.0.]
[ 0.0.0.0.1.]]
3* 3随机填充数据矩阵:
[[ 0.681549250.83888520.2949826]
[ 0.963048090.279172410.08094938]
[ 0.653578310.24164510.93637365]]
3.2 矩阵运算
Numpy提供了线性代数函数库linalg,该库包含了线性代数所需的所有功能
函数
描述
diag
返回方阵的对角线元素,或将一维数组转换为方阵
dot
返回两个数组的点积
inner
两个数组的内积
matmul
两个数组的矩阵积
linalg.det
计算矩阵的行列式
linalg.inv
计算矩阵的乘法逆矩阵
trace
计算对角线元素的和
linalg.eig
计算方阵的本征值和本征向量
linalg.pinv
计算矩阵的Moore-Penrose伪逆qr计算QR分解
linalg.solve
求解线性矩阵方程Ax=b,其中A为一个方阵
linalg.svd
计算奇异值分解(SVD)
linalg.lstsq
计算Ax=b的最小二乘解
代码演示:
a = np.array([ 1, 2, 3])
b = np.array([[ 2, 3, 4],[ 5, 8, 9],[ 9, 6, 1]])
”’array是一个一维数组时,返回一个以一维数组为对角线元素的矩阵”’
print(np.diag(a))
# 输出结果:
[[ 100]
[ 020]
[ 003]]
”’array是一个二维矩阵时,结果输出矩阵的对角线元素”’
print(np.diag(b))
# 输出结果:[2 8 1]
a = np.array([ 2, 5, 3, 4])
b = np.array([ 1, 8, 2, 2])
”’a和b都是一个一维数组时,返回向量的点积”’
print(np.dot(a,b))
# 输出结果:56
a = np.array([[ 1, 2],[ 3, 4]])
b = np.array([[ 2, 8],[ 3, 2]])
”’a和b都是二维矩阵时,返回矩阵的乘法运算”’
print(np.dot(a,b))
# 输出结果:
[[ 812]
[ 1832]]
”’计算矩阵a和b的内积”’
print(np.inner(a,b))
# 输出结果:
[[ 187]
[ 3817]]
”’计算矩阵积,这里与dot一样”’
print(np.matmul(a,b))
# 输出结果:
[[ 812]
[ 1832]]
”’计算行列式”’
print(np.linalg.det(a))
# 输出结果:-2.0000000000000004
”’计算a的逆”’
print(np.linalg.inv(a))
# 输出结果:
[[ -2.1.]
[ 1.5-0.5]]
”’计算a对角线的和”’
print(np.trace(a))
# 输出结果:5
”’计算本征值和本征向量”’
print(np.linalg.eig(a))
# 输出结果:
(array([ -0.37228132, 5.37228132]), array([[ -0.82456484, -0.41597356],
[ 0.56576746, -0.90937671]]))
”’奇异分解”’
print(np.linalg.svd(a))
# 输出结果:
(array([[ -0.40455358, -0.9145143],
[ -0.9145143, 0.40455358]]), array([ 5.4649857, 0.36596619]), array([[ -0.57604844, -0.81741556],
[ 0.81741556, -0.57604844]]))
”’计算a 的伪逆矩阵”’
print(np.linalg.pinv(a))
# 输出结果:
[[ -2.1.]
[ 1.5-0.5]]
”’求解ax=b”’
print(np.linalg.solve(a,b))
# 输出结果:
[[ -1.-14.]
[ 1.511.]]
至此,本次分享已结束如果你喜欢的话,可以转发或者点个“在看”支持一下~点击原文链接,可以下载《Python工具代码速查手册》,可以点个star支持一下哦~
简介:浩彬老撕 好玩的数据炼丹师, 曾经的IBM数据挖掘攻城狮, 还没开始就过气数据科学界的段子手, 致力于数据科学知识分享,不定期送书活动 返回搜狐,查看更多
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树科学计算基础软件包NumPyNumPy概述209485 人正在系统学习中 相关资源:减压孔板计算软件v1.1免费绿色版-其它代码类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!