利用稀疏格式矩阵求解方程组以及机器学习训练速度对比
本文要点:
1、几个稀疏矩阵的应用场景
2、scipy得到稀疏格式矩阵后专用的方程组求解器
3、用稀疏格式求解方程组的速度对比
4、稀疏矩阵与原矩阵内存大小对比
5、python稀疏格式与array格式的互换
在矩阵中有大量零元素的矩阵叫做稀疏矩阵(Sparse Matrix),相反那些非零数值占大多数元素的矩阵即是稠密矩阵(Dense Matrix)。矩阵中零元素如果特别多的话,不但占用了本没必要用的内存,而且在涉及到矩阵运算的过程上拉低了程序效率:例如求解方程组和矩阵乘法。所以为了着眼于矩阵运算中真正起作用的那些非零元素,就有了如CCS(列优先存储),CRS(行优先存储)之类存储稀疏矩阵的方法,本质都是只关注稀疏矩阵中非零元素的值和位置。
理论可以参考下文:https://blog.csdn.net/wendaocp/article/details/106729454
稀疏格式矩阵经常在以下几个场景出现:三对角阵系数的线性方程组求解、机器学习中存在大量0数据的训练集、矩阵乘积
一、求解方程组
1.时长对比
作为示例这里创建一个计算数学专业里有限元和有限差分经常用到的三对角阵,维度为10000*10000
import numpy as np
import sys
import time#创建一个10000*10000的三对角矩阵A和10000*1的向量b
A = np.diag([i for i in range(1,10001)])+ np.diag([i for i in range(2,10001)],1)+np.diag([i for i in range(2,10001)],-1)
b = np.ones_like(A[0])#计算用原array矩阵来求解方程组AX=b
start =time.time()
X1 = np.linalg.solve(A,b) #求解
end=time.time()
print(end-start)
计算时间为5.853S,下面看利用稀疏矩阵
from scipy.sparse import coo_matrix
from scipy.sparse.linalg import spsolve #稀疏矩阵求解器
coo_A =coo_matrix(A) #转为稀疏矩阵start =time.time()
X2 = spsolve(coo_A,b) #求解
end=time.time()
print(end-start)
计算时间为0.004S,运算时间大幅减少。
2.两者内存对比
print("原矩阵A的内存大小:"+str(sys.getsizeof(A)/1024**2)+" MB")
print("转为稀疏矩阵后的内存大小:"+str(sys.getsizeof(coo_a)/ 1024 ** 2)+" MB")
原矩阵A的内存大小:381.46984100341797 MB
转为稀疏矩阵后的内存大小:4.57763671875e-05 MB
3.稀疏矩阵与array的互换
coo_A =coo_matrix(A) #转为稀疏矩阵
A =coo_A.toarray() #转为array矩阵
二、机器学习训练
在机器学习中使用稀疏矩阵并不是没有缺点,虽然稀疏矩阵传入模型训练一般可以提高速度并且降低内存消耗,但在array中的切片操作基本都用不了了,所以一般在数据预处理结束、传入训练的时候采用稀疏矩阵。
拿一个以前比赛时用到的数据集,黄色部分为值为0的部分,可以看到0元素特别多,可以看作一个稀疏矩阵。
原先的数据集有130万条,压缩前后的内存大小为160MB
随便创建一个lgb分类器,训练时间对比:运行时长大概减少了15%
在其他地方验证也是一样,在0元素较多的情况下传入稀疏矩阵进行训练,大部分时候可以提高训练速度。
利用稀疏格式矩阵求解方程组以及机器学习训练速度对比相关推荐
- 矩阵方程求解最快c语言算法,求助! C语言用矩阵求解方程组
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 程序在这个邮箱里,行列式的计算没有问题,好像问题出在了把行列式变换上,就是slove(1,n)这个函数的运算上,那位大神可以看看问题到底出在哪-- 不胜感 ...
- 利用Matlab优化工具箱求解旅行商最短路径问题
前面介绍了利用Matlab二元整数规划求解数独问题,对于另一个问题-旅行商问题也可以用它来求解. 旅行商问题就是找到经过所有站点的最短闭合路径,如下图为在美国地图框架内产生的200个旅行站点,而旅行商 ...
- 利用特征值与特征向量求解弹性力学中的主应力与主平面问题
利用特征值与特征向量求解弹性力学中的主应力与主平面问题 前言 一.二向应力状态 1. 莫尔圆图解法 2. 特征值与特征向量解法 二.三向应力状态 前言 已知物体在任意一点的六个应力分量(σx,σy,σ ...
- 运用雅可比(Jacobi)和高斯-赛德尔(GS公式)求解方程组
实验名称: 运用雅克比和高斯赛德尔公式求解方程组 实验目的: a. 比较两种方法的收敛速度 b. 验证收敛条件的正确性 实验内容 1.比较两种方法的收敛速度 Jacobi公式原理 xi(k+1)=1a ...
- 追赶法求解方程组备忘
本篇内容为数值分析中,用追赶法求解方程组的方法,备忘如下: 1. 原理部分 追赶法求解的矩阵格式一般如下: a1 c1 0 0 b2 a2 c2 0 0 b3 a3 c3 0 0 b4 a4 如果矩阵 ...
- C++利用二维数组求解线性方程组
C++利用二维数组求解线性方程组 今天给大家介绍二维数组,以下介绍来自二维数组百度百科 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式] ...
- ORBSLAM中单应矩阵求解
ORBSLAM中单应矩阵求解 1. 单应矩阵求解 2.用DLT方法求解单应矩阵H 3. 三角化求深度 4. 使用RT三角化 1. 单应矩阵求解 /*** @brief 计算单应矩阵,假设场景为平面情况 ...
- 【数据湖加速篇】 —— 如何利用缓存加速服务来提升数据湖上机器学习训练速度
简介: JindoFS提供了一个计算侧的分布式缓存系统,可以有效利用计算集群上的本地存储资源(磁盘或者内存)缓存OSS上的热数据,从而减少对OSS上数据的反复拉取,消耗网络带宽. 背景介绍 近些年,机 ...
- 【入门】(二)相机标定、矩阵求解、相机位姿势估计
目录 目录 一.相机模型.内参.外参,畸变以及相机标定 二.基本矩阵与对极约束 三.单应矩阵 四.相机姿势估计 一.相机模型.内参.外参,畸变以及相机标定 1.坐标系转换 (1)坐标系概念 世界坐标系 ...
最新文章
- FTP服务器的搭建及简单应用
- logback输出日志到sentry
- CodedInputStream encountered an embedded string or message which claimed to have negative size.
- 深度学习pytorch--softmax回归(二)
- 【操作系统】用户可通过三种方式使用计算机
- 业务重点-实现一个简单的手机号码验证
- GB50311-2007综合布线工程设计规范
- Windows上安装PyV8
- SQL Server 2008 R2安装步骤示例
- 不同公式等号对齐_魔方的公式(第二版)
- 配置微信企业邮箱用于系统自动发送邮件
- 清华计算机系竞赛生比例,2018年五大学科竞赛保送生去向统计表(最新数据)
- Linux下设置网卡速率 降低网卡速度
- eclipse连接雷电模拟器,夜神模拟器,逍遥安卓模拟器,天天模拟器,海马玩模拟器,网易MUMU模拟器
- What Makes a Great Maintainer of Open Source Projects?
- linux7分区硬盘,centos7根分区硬盘扩容
- AndroidStudio Sync遇到版号问题
- 互联网赚钱发展趋势,网赚案例精准分析
- 微头条自媒体常见领域,好创作,快速实现自媒体变现
- 微信小程序setData的使用