【Python】Numpy中对向量、矩阵的使用
在下面的代码里面,我们利用numpy和scipy做了很多工作,每一行都有注释,讲解了对应的向量/矩阵操作。
归纳一下,下面的代码主要做了这些事:
- 创建一个向量
- 创建一个矩阵
- 创建一个稀疏矩阵
- 选择元素
- 展示一个矩阵的属性
- 对多个元素同时应用某种操作
- 找到最大值和最小值
- 计算平均值、方差和标准差
- 矩阵变形
- 转置向量或矩阵
- 展开一个矩阵
- 计算矩阵的秩
- 计算行列式
- 获取矩阵的对角线元素
- 计算矩阵的迹
- 计算特征值和特征向量
- 计算点积
- 矩阵的相加相减
- 矩阵的乘法
- 计算矩阵的逆
一起来看代码吧:
# 加载numpy库
import numpy as npfrom scipy import sparse# 创建一个一维数组表示一个行向量
vector_row = np.array([1, 2, 3])# 创建一个一维数组表示一个列向量
vector_column = np.array([[1], [2], [3]])# 创建一个二维数组表示一个矩阵
matrix1 = np.array([[1, 2], [1, 2], [1, 2]])# 利用Numpy内置矩阵数据结构
matrix1_object = np.mat([[1, 2], [1, 2], [1, 2]])# 创建一个新的矩阵
matrix2 = np.array([[0, 0], [0, 1], [3, 0]])# 创建一个压缩的稀疏行(CSR)矩阵
matrix2_sparse = sparse.csc_matrix(matrix2)# 查看稀疏矩阵
print(matrix2_sparse)# 创建一个更大的矩阵
matrix_large = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],[3, 0, 0, 0, 0, 0, 0, 0, 0, 0]])# 创建一个CSR矩阵
matrix_large_sparse = sparse.csr_matrix(matrix_large)# 查看更大的稀疏矩阵
print(matrix_large_sparse)# 创建一个行向量
vector = np.array([1, 2, 3, 4, 5, 6])# 创建矩阵
matrix_vector = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 选择向量的第三个元素
print(vector[2])# 选择第二行第二列
print(matrix_vector[1, 1])# 选取一个向量的所有元素
print(vector[:])# 选取从0开始一直到第3个(包含第3个)元素
print(vector[:3])# 选取第3个元素之后的全部元素
print(vector[3:])# 选取最后一个元素
print(vector[-1])# 选取矩阵的第1行和第2行以及所有列
print(matrix_vector[:2, :])# 选取所有行以及第2列
print(matrix_vector[:, 1:2])# 选取所有行以及第2列并转换成一个新的行向量
print(matrix_vector[:, 1])# 创建新的矩阵
matrix3 = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])# 查看行数和列数
print(matrix3.shape)# 查看元素数量
print(matrix3.size)# 查看维数
print(matrix3.ndim)# 下面使用的矩阵是matrix_vector
# 创建一个匿名函数,返回输入值加上100以后的值
add_100 = lambda i: i+100# 创建向量转化函数
vectorized_add_100 = np.vectorize(add_100)# 对矩阵的所有元素应用这个函数
print(vectorized_add_100(matrix_vector))# 用后矩阵本身不变
print(matrix_vector)# 连续使用
print(vectorized_add_100(vectorized_add_100(matrix_vector)))# 返回最大的元素
print(np.max(matrix_vector))# 返回最小元素
print(np.min(matrix_vector))# 找到每一列的最大元素
print(np.max(matrix_vector, axis=0))# 找到每一行最大的元素
print(np.max(matrix_vector, axis=1))# 返回平均值
print(np.mean(matrix_vector))# 返回方差
print(np.var(matrix_vector))# 返回标准差
print(np.std(matrix_vector))# 求每一列的平均值
print(np.mean(matrix_vector, axis=0))# 求每一行的方差
print(np.var(matrix_vector, axis=1))# 将matrix3矩阵变为2×6矩阵
matrix4 = matrix3.reshape(2, 6)
print(matrix4)# 上面的变形要求前后元素个数相同,且不会改变元素个数
print(matrix4.size)# reshape时传入参数-1意味着可以根据需要填充元素
print(matrix3.reshape(1, -1))# reshape如果提供一个整数,那么reshape会返回一个长度为该整数值的一维数组
print(matrix3.reshape(12))# 转置matrix_vector矩阵
print(matrix_vector.T)# 严格地讲,向量是不能被转置的
print(vector.T)# 转置向量通常指二维数组表示形式下将行向量转换为列向量或者反向转换
print(np.array([[1, 2, 3, 4, 5, 6]]).T)# 将matrix_vector矩阵展开
print(matrix_vector.flatten())# 将矩阵展开的另一种策略是利用reshape创建一个行向量
print(matrix_vector.reshape(1, -1))# 创建用于求秩的新矩阵
matrix5 = np.array([[1, 1, 1], [1, 1, 10], [1, 1, 15]])# 计算矩阵matrix5的秩
print(np.linalg.matrix_rank(matrix5))# 创建用于行列式求解的新矩阵
matrix6 = np.array([[1, 2, 3], [2, 4, 6], [3, 8, 9]])# 求解矩阵matrix6的行列式
print(np.linalg.det(matrix6))# 返回矩阵的对角线元素
print(matrix6.diagonal())# 返回主对角线向上偏移量为1的对角线元素
print(matrix6.diagonal(offset=1))# 返回主对角线向下偏移量为1的对角线元素
print(matrix6.diagonal(offset=-1))# 返回矩阵的迹
print(matrix6.trace())# 求迹的另外的方法(返回对角线元素并求和)
print(sum(matrix6.diagonal()))# 创建一个求解特征值、特征向量的矩阵
matrix7 = np.array([[1, -1, 3], [1, 1, 6], [3, 8, 9]])# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(matrix7)# 查看特征值
print(eigenvalues)# 查看特征向量
print(eigenvectors)# 构造两个点积(数量积)所需向量
vector_a = np.array([1, 2, 3])
vector_b = np.array([4, 5, 6])# 计算点积
print(np.dot(vector_a, vector_b))# Python 3.5+ 版本可以这样求解点积
print(vector_a @ vector_b)# 构造两个可用于加减的矩阵
matrix_a = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 2]])
matrix_b = np.array([[1, 3, 1], [1, 3, 1], [1, 3, 8]])# 两矩阵相加
print(np.add(matrix_a, matrix_b))# 两矩阵相减
print(np.subtract(matrix_a, matrix_b))# 直接用+/-也可以做矩阵加减
print(matrix_a + matrix_b)
print(matrix_a - matrix_b)# 构造两个可用于乘法的小矩阵
matrix_c = np.array([[1, 1], [1, 2]])
matrix_d = np.array([[1, 3], [1, 2]])# 两矩阵相乘
print(np.dot(matrix_c, matrix_d))# Python 3.5+ 版本可以这样求解矩阵乘法
print(matrix_c @ matrix_d)# 我们也可以把两矩阵对应元素相乘,而非矩阵乘法
print(matrix_c * matrix_d)# 创建一个用于求逆的矩阵
matrix8 = np.array([[1, 4], [2, 5]])# 计算矩阵的逆
print(np.linalg.inv(matrix8))# 验证一个矩阵和它的逆矩阵相乘等于I(单位矩阵)
print(matrix8 @ np.linalg.inv(matrix8))
测试结果:
(2, 0) 3(1, 1) 1(1, 1) 1(2, 0) 3
3
5
[1 2 3 4 5 6]
[1 2 3]
[4 5 6]
6
[[1 2 3][4 5 6]]
[[2][5][8]]
[2 5 8]
(3, 4)
12
2
[[101 102 103][104 105 106][107 108 109]]
[[1 2 3][4 5 6][7 8 9]]
[[201 202 203][204 205 206][207 208 209]]
9
1
[7 8 9]
[3 6 9]
5.0
6.666666666666667
2.581988897471611
[4. 5. 6.]
[0.66666667 0.66666667 0.66666667]
[[ 1 2 3 4 5 6][ 7 8 9 10 11 12]]
12
[[ 1 2 3 4 5 6 7 8 9 10 11 12]]
[ 1 2 3 4 5 6 7 8 9 10 11 12]
[[1 4 7][2 5 8][3 6 9]]
[1 2 3 4 5 6]
[[1][2][3][4][5][6]]
[1 2 3 4 5 6 7 8 9]
[[1 2 3 4 5 6 7 8 9]]
2
0.0
[1 4 9]
[2 6]
[2 8]
14
14
[13.55075847 0.74003145 -3.29078992]
[[-0.17622017 -0.96677403 -0.53373322][-0.435951 0.2053623 -0.64324848][-0.88254925 0.15223105 0.54896288]]
32
32
[[ 2 4 2][ 2 4 2][ 2 4 10]]
[[ 0 -2 0][ 0 -2 0][ 0 -2 -6]]
[[ 2 4 2][ 2 4 2][ 2 4 10]]
[[ 0 -2 0][ 0 -2 0][ 0 -2 -6]]
[[2 5][3 7]]
[[2 5][3 7]]
[[1 3][1 4]]
[[-1.66666667 1.33333333][ 0.66666667 -0.33333333]]
[[1.00000000e+00 0.00000000e+00][1.11022302e-16 1.00000000e+00]]
【Python】Numpy中对向量、矩阵的使用相关推荐
- python二维元素向量_详解python Numpy中求向量和矩阵的范数
在python Numpy中求向量和矩阵的范数实例 np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数),norm则表示范数. 函数参数 x_norm=n ...
- python求向量函数的雅可比矩阵_在python Numpy中求向量和矩阵的范数实例
np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数),norm则表示范数. 函数参数 x_norm=np.linalg.norm(x, ord=None, ...
- python 向量_关于Python中的向量相加和numpy中的向量相加效率对比
直接使用Python来实现向量的相加 # -*-coding:utf-8-*- #向量相加 def pythonsum(n): a = range(n) b = range(n) c = [] for ...
- python坐标系 向量分量_关于Python中的向量相加和numpy中的向量相加效率对比
直接使用Python来实现向量的相加 # -*-coding:utf-8-*- #向量相加 def pythonsum(n): a = range(n) b = range(n) c = [] for ...
- python Numpy 中的矩阵向量乘法(np.multiply()、np.dot()、np.matmul() 和 星号(*)、@)
python Numpy 中的矩阵向量乘法 总结 1. 对于 np.array 对象 1.1 元素乘法 用 a*b 或 np.multiply(a,b) 1.2 矩阵乘法 用 np.dot(a,b) ...
- python3 nonzero_浅谈python numpy中nonzero()的用法
nonzero函数返回非零元素的目录. 返回值为元组, 两个值分别为两个维度, 包含了相应维度上非零元素的目录值. import numpy as np A = np.mat([[0,1,2,3,4, ...
- python中使用numpy包的向量矩阵相乘np.dot和np.matmul
一直对np的线性运算不太清晰,正好上课讲到了,做一个笔记整个理解一下 1.向量和矩阵 在numpy中,一重方括号表示的是向量vector,vector没有行列的概念.二重方括号表示矩阵matrix,有 ...
- python/numpy中数组array和矩阵matrix的区别
在numpy中,array(实际上是ndarray,表示多维数组)是可以有多维度的,而matrix只有两个维度,即行和列.所以matrix是array的一种特例,因而它继承了array的所有函数,同时 ...
- Python Numpy中的范数
数学概念 范数,是具有 "长度" 概念的函数.在线性代数.泛函分析及相关的数学领域,范数是一个函数,是矢量空间内的所有矢量赋予非零的正长度或大小. 在数学上,范数包括向量范数和矩阵 ...
最新文章
- 译:Spring Data Repository 不区分大小写查询
- 个人作业——week3
- ElasticSearch学习笔记-02集群相关操作_cat参数
- bootstrap php zend,Zend Framework教程之Bootstrap类用法概述
- 计算机组装图示,台式机组装教程-台式机DIY装机教程示意图(自己动手组装电脑)...
- 前端学习(1862)vue之电商管理系统电商系统之绘制默认头像
- discuz mysql 类_discuz7 phpMysql操作类
- ​CVPR2021最佳学生论文提名:Less is More
- 游戏英雄联盟高清壁纸,人物角色都包括
- QT设置相对路径最简单方法
- Fefora17联想笔记本安装无线网卡
- 2017 年大数据、物联网与 AI 的趋势预测
- fortran95数组输出练习感悟
- 如何编写投标项目系统设计方案?
- 腾讯认证QQ空间秒升级为专业版方法!
- stlink utility
- Excel的查找和引用函数:VLOOKUP、OFFSET、MATCH、INDEX、INDIRECT
- 暴雪修改手机500服务器错误,网站http服务器内部500错误的解决方法 [图文]
- 浏览器无法启动百度网盘应用的解决办法
- python基础-print输出函数
热门文章
- React- jsx的使用可以渲染html标签 或React组件
- 防止sql注入的方法
- 从Wireshark看TCP连接的建立与关闭
- linux lvm 磁盘管理
- JAVA每个初学者都应该搞懂的问题 还可以比较基础
- 求最长回文串-从动态规划到马拉车之路(下)
- Spring项目中使用webservice实现h5的websocket通信
- Vue中message.split().reverse().join()函数用法
- 织梦缩略图自动补齐绝对路径_[教程]织梦CMS缩略图和文章内容图片自动转化为带域名的绝对路径...
- MySQL笔记创建表结构_MySQL表结构笔记9