使用 Eigen 处理稀疏矩阵运算时候报错

C++语言 码拜 8年前 (2016-05-28) 2188次浏览
本人目前在编一个项目,要的挺急的
项目中要处理大型的稀疏矩阵运算,因此本人选择用 Eigen 来实现,但是目前编到最关键的运算部分却报错了。小弟不会调,还请高手指点啊!
本人的程序用的是MFC框架来编的,其余还有很多类和Dlg的定义没有粘下来,但是本人前期运行时候检查过,错误不在其他地方。

	#include "stdafx.h"
#include "PET Reconstruction.h"
#include "MyFile.h"
#include "afxdialogex.h"
#include "MyPicture.h"
#include "LoadFile.h"
#include "Algorithm.h"
#include "TripleList.h"
#include <Eigen/Sparse>
using namespace Eigen;
void MyFile::OnBnClickedAffirm()
{
	// TODO: 在此添加控件通知处理程序代码
	LoadFile LoadFile;
	MessageBox(_T("Start to load files! It will take times, please wait..."));
	TripleList SysMtx_TripleList = LoadFile.Load_TripleList();
	MessageBox(_T("Load TripleList successed!"));
	//此处要将 IDC_FilePathName (int) 转换为 CString 型
	LoadFile.Load_Image(m_FilePathName);
	MessageBox(_T("Load Image successed!"));
	//弹出图片对话框
	MyPicture Picture;
	Picture.DoModal();
	//开始进行迭代计算
	MessageBox(_T("Start computation, please wait..."));
	Algorithm Algorithm;
	//计算系统矩阵列和
	std::vector<double> vec_SysMtxColSum(16384);
	Algorithm.SysMtxColSum(SysMtx_TripleList, vec_SysMtxColSum);
	//构造系统矩阵
	Eigen::SparseMatrix<double> Eigen_SysMtx(16384, 16384);
	Eigen_SysMtx.setFromTriplets(LoadFile.vec_Triplet.begin(), LoadFile.vec_Triplet.end());
	//开始迭代过程
	std::vector<double> vec_TemValue(16384, 1);
	std::vector<double> vec_Result;
	MessageBox(_T("Nothing goes wrong, please continue..."));
	vec_Result = Eigen_SysMtx * vec_TemValue;//报错就在这里,编译器显示无匹配的操作符
//这里的 Eigen_SysMtx 是一个由 Eigen 生产的稀疏矩阵; vec_TemValue 如上面的定义,是个 double 类型的向量
	vec_Result *=  vec_TemValue;//这里也是
}

使用 Eigen 处理稀疏矩阵运算时候报错
跪求高手指点啊!小弟这个项目现在要的真的很急使用 Eigen 处理稀疏矩阵运算时候报错

解决方案

30

std::vector 没有不支持矩阵运算,改用 eigen 里面的 Vector 试一下。

30

引用:
Quote: 引用:

std::vector 没有不支持矩阵运算,改用 eigen 里面的 Vector 试一下。

感谢您的回复!
本人按照您的方式改了一下,把 std::vector 换成了 Eigen::VectorXd, 操作符的报错果然没有了
但是本人现在遇到了几个新的问题,不知道能不能劳烦您帮看一下:
原因是本人原来有个向量是确定长度为16384,并且初始化其中每个值都为1。本人不知道这个用 Eigen 的 Vector 该怎么样实现
还有一个向量是要预先确定长度,之后用一个循环来为其依次赋值。本人原来用的就是 std::vector.pushback() 这个函数,但是Eigen的vector好像不能这么写,想问一下您知不知道应该怎么修改一下?
本人上网查了些资料,但是小弟学编程不久还看不懂,拜托您帮忙解决一下这两个问题OK?多谢!

本人要是没记错的话,这些运算 eigen vector 都支持,具体怎么做,你就看文档吧。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明使用 Eigen 处理稀疏矩阵运算时候报错
喜欢 (0)
[1034331897@qq.com]
分享 (0)