[Eigen] Issues when using Eigen
1. Efficient Expression
Refer to this post http://eigen.tuxfamily.org/dox/TopicWritingEfficientProductExpression.html, for dense matrix calculation.
But what about sparse matrix product??
What does Eigen do when:
- [Enhancement, unsolved] Sparse matrix product –> Sparse m? dense matrix and vector? Does it make itself dense first?
Is this expression fast when using SpMat? When a_, y_, lambda_*_, is a (dense) vector, penalty_ a scalar?
a_ = - penalty_ * (A_.transpose() * y_)
+ A_.transpose() * lambda_y_
+ Q_.transpose() * lambda_stf_;
or this one better following the post above?
a_ = - penalty_ * (A_.transpose() * y_);
a_.noalias() += A_.transpose() * lambda_y_;
a_.noalias() += Q_.transpose() * lambda_stf_;
- [Enhancement, unsolved] Will it be faster to use sparse vector when do multiplication with sparse matrix, instead of dense one?
- [Bugs, unsolved] When I ran the following I got bugs:
VX dual_res_v = -lambda_stf_.transpose() * (Q_ - Q_new);
dual_res_v.noalias() += - penalty_ * (y_ - y_prev).transpose() * A_;
dual_res_v.noalias() += - (lambda_y_ - lambda_y_prev).transpose() * A_;
dual_res_v.noalias() += penalty_ * x_.transpose() * (Q_ - Q_new).transpose() * Q_;
Where VX is dense vector in Eigen, and lambda_*_, y_* and x_* are dense vector, Q_ and A_ are sparse matrix.
The index is compatible. The following lines work fine in my code:
VX dual_res_v = -lambda_stf_.transpose() * (Q_ - Q_new)
- penalty_ * (y_ - y_prev).transpose() * A_
- (lambda_y_ - lambda_y_prev).transpose() * A_
+ penalty_ * x_.transpose() * (Q_ - Q_new).transpose() * Q_;
But I don’t know what’s wrong with the new one.
[Eigen] Issues when using Eigen的更多相关文章
- Eigen矩阵基本运算
1 矩阵基本运算简介 Eigen重载了+,-,*运算符.同时提供了一些方法如dot(),cross()等.对于矩阵类的运算符重载只支持线性运算,比如matrix1*matrix2是矩阵相乘,当然必须要 ...
- Eigen库实现简单的旋转、平移操作
本来课程要求用GUI界面来实现Eigen的旋转.平移操作的,但是接触GUI编程时间太短,虽然要求很简单,但是做了几天还是没有完成.就把命令行下面的简单的贴一下吧. main.cpp #include ...
- C++调用Matlab引擎及Eigen配置
这个周开始要着手实现网格水印的代码了,虽然还什么都不会,但也只能一步步摸索着往前走了. 我要实现的论文题目是<<Watermarking 3D Polygonal Meshes in th ...
- C++矩阵处理库--Eigen初步使用
项目要进行比较多的矩阵操作,特别是二维矩阵.刚开始做实验时,使用了动态二维数组,于是写了一堆Matrix函数,作矩阵的乘除加减求逆求行列式.实验做完了,开始做代码优化,发现Matrix.h文件里适 ...
- Eigen实现坐标转换
(<视觉SLAM十四讲>第三讲习题7)设有小萝卜一号和二号在世界坐标系中.一号位姿q1 = [0.35, 0.2, 0.3, 0.1],t1=[0.3, 0.1, 0.1].二号位姿q2= ...
- Eigen使用矩阵作为函数参数
1 使用矩阵作为函数参数介绍 文章来源Writing Functions Taking %Eigen Types as Parameters Eigen为了在函数中传递不同的类型使用了表达式模板技术. ...
- c++矩阵运算库Eigen简介
C++矩阵运算库Eigen介绍 C++中的矩阵运算库常用的有Armadillo,Eigen,OpenCV,ViennaCL,PETSc等.我自己在网上搜了一下不同运算库的特点,最后选择了Eigen.主 ...
- 1.2 eigen中矩阵和向量的运算
1.2 矩阵和向量的运算 1.介绍 eigen给矩阵和向量的算术运算提供重载的c++算术运算符例如+,-,*或这一些点乘dot(),叉乘cross()等等.对于矩阵类(矩阵和向量,之后统称为矩阵 类) ...
- Eigen教程(3)
整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html 矩阵和向量的运算 提供一些概述和细节:关于矩阵.向量以及标量的运算. 介绍 Eige ...
随机推荐
- CentOS 6下Apache的https虚拟主机实践
题目:1.建立httpd服务器,要求: 提供两个基于名称的虚拟主机: (a)www1.buybybuy.com,页面文件目录为/web/vhosts/www1:错误日志为/var/log/httpd/ ...
- .NET 工具类ObjectDumper 打印对象
// Comes from the LINQ samples provided by Microsoft //Copyright (C) Microsoft Corporation. All righ ...
- arcgis中DEM如何生成等高线
地形图指比例尺大于1∶100万的着重表示地形的普通地图(根据经纬度进行分幅,常用有1:100万,1:50万,1比25万,1:15万,1:10万,1:5万等等).由于制图的区域范围比较小,因此能比较精确 ...
- mysql error: (2006, 'MySQL server has gone away')
max_allowed_packet=16M wait_timeout= interactive_timeout = vim /etc/my.cnf mysqld 中加入上面的内容.
- linux top命令中各cpu占用率含义
linux top命令中各cpu占用率含义 [尊重原创文章摘自:http://www.iteye.com/topic/1137848]0.3% us 用户空间占用CPU百分比 1.0% sy 内核空间 ...
- Generate SQL from Excel
Tips: SUBSTITUTE(D4,"'","''")---if D4 contain ', this function will convert ' ...
- CentOS平台部署vsftp(基于虚拟用户)
1. 安装FTP 1 2 [root@task ~]# yum install vsftpd –y [root@task ~]# chkconfig vsftpd on # 配置开机 ...
- const char **
foo (const char **p){ } main (int argh,char **argv) { foo(argv); } warning : argument is i ...
- 优化 从Draw Calls到GC
原文出处: 慕容小匹夫的博客(@慕容小匹夫) 欢迎分享原创到伯乐头条 前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章 ...
- SQL Server 表变量和临时表的区别
SQL Server 表变量和临时表的区别 一.表变量 表变量在SQL Server 2000中首次被引入.表变量的具体定义包括列定义,列名,数据类型和约束.而在表变量中可以使用的约束包括主键约束,唯 ...