标签:Eigen 矩阵 稀疏 --- VectorXi SpMat include Math
Eigen稀疏矩阵乘法
- 稀疏矩阵能够节省存储空间;
- Eigen中稀疏矩阵的存储方式:CRS, CCS;
- 稀疏矩阵缩短遍历元素的时间。
Eigen稀疏矩阵乘以向量
- 计算公式: \(MatResult = Matsparse*Vec\)
- 利用Eigen可以直接根据公式计算出来,但是笔者想弄楚,Eigen是怎样实现的,于是用迭代法实现计算
示例:
#include <Eigen/Sparse>
#include <vector>
#include <iostream>
using namespace Eigen;
using namespace std;
SparseMatrix<int,RowMajor> SpMat(5,5);
int main(void)
{
MatrixXi A(5,5);
VectorXi V(5);
VectorXi buffer(5);
VectorXi Ibus(5);
buffer << 0, 0, 0, 0, 0;
Ibus << 0, 0, 0, 0, 0;
V << 1, 2, 3, 4, 5;
A << 0, 3, 0, 0, 0,
22, 0, 0, 0, 17,
7, 5, 0, 1, 0,
0, 0, 0, 0, 0,
0, 0, 14, 0, 8;
SpMat = A.sparseView();
for (int k = 0; k < SpMat.outerSize(); ++k)
{
for (SparseMatrix<int, RowMajor>::InnerIterator it(SpMat, k); it; ++it)
{
//cout<<it.value()<<endl; //Eigen 存储稀疏矩阵的值,默认是CCS,这里指定成了CRS
//cout << it.row() << endl; //Eigen 行索引
//cout << it.col() << endl; //Eigen 列索引
//cout << it.index() << endl; //这里index=it.col()
buffer(k) += it.value()*V(it.index());
}
Ibus(k) += buffer(k);
}
cout << SpMat << endl;
cout << Ibus << endl;
return 0;
}
标签:Eigen,矩阵,稀疏,---,VectorXi,SpMat,include,Math 来源: https://www.cnblogs.com/xuelanga000/p/13620594.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。