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的更多相关文章

  1. Eigen矩阵基本运算

    1 矩阵基本运算简介 Eigen重载了+,-,*运算符.同时提供了一些方法如dot(),cross()等.对于矩阵类的运算符重载只支持线性运算,比如matrix1*matrix2是矩阵相乘,当然必须要 ...

  2. Eigen库实现简单的旋转、平移操作

    本来课程要求用GUI界面来实现Eigen的旋转.平移操作的,但是接触GUI编程时间太短,虽然要求很简单,但是做了几天还是没有完成.就把命令行下面的简单的贴一下吧. main.cpp #include ...

  3. C++调用Matlab引擎及Eigen配置

    这个周开始要着手实现网格水印的代码了,虽然还什么都不会,但也只能一步步摸索着往前走了. 我要实现的论文题目是<<Watermarking 3D Polygonal Meshes in th ...

  4. C++矩阵处理库--Eigen初步使用

      项目要进行比较多的矩阵操作,特别是二维矩阵.刚开始做实验时,使用了动态二维数组,于是写了一堆Matrix函数,作矩阵的乘除加减求逆求行列式.实验做完了,开始做代码优化,发现Matrix.h文件里适 ...

  5. Eigen实现坐标转换

    (<视觉SLAM十四讲>第三讲习题7)设有小萝卜一号和二号在世界坐标系中.一号位姿q1 = [0.35, 0.2, 0.3, 0.1],t1=[0.3, 0.1, 0.1].二号位姿q2= ...

  6. Eigen使用矩阵作为函数参数

    1 使用矩阵作为函数参数介绍 文章来源Writing Functions Taking %Eigen Types as Parameters Eigen为了在函数中传递不同的类型使用了表达式模板技术. ...

  7. c++矩阵运算库Eigen简介

    C++矩阵运算库Eigen介绍 C++中的矩阵运算库常用的有Armadillo,Eigen,OpenCV,ViennaCL,PETSc等.我自己在网上搜了一下不同运算库的特点,最后选择了Eigen.主 ...

  8. 1.2 eigen中矩阵和向量的运算

    1.2 矩阵和向量的运算 1.介绍 eigen给矩阵和向量的算术运算提供重载的c++算术运算符例如+,-,*或这一些点乘dot(),叉乘cross()等等.对于矩阵类(矩阵和向量,之后统称为矩阵 类) ...

  9. Eigen教程(3)

    整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html 矩阵和向量的运算 提供一些概述和细节:关于矩阵.向量以及标量的运算. 介绍 Eige ...

随机推荐

  1. leetcode 202

    202. Happy Number Write an algorithm to determine if a number is "happy". A happy number i ...

  2. 全站 HTTPS 来了(转载)

    转载:本文为腾讯Bugly原创文章. 最近大家在使用百度.谷歌或淘宝的时候,是不是注意浏览器左上角已经全部出现了一把绿色锁,这把锁表明该网站已经使用了 HTTPS 进行保护.仔细观察,会发现这些网站已 ...

  3. php面试题目

     PHP测试小例 1. 禁用COOKIE 后 SEESION 还能用吗? Cookie 是保存在浏览器 1.cookie是保存在本地的,而seesion是保存在服务器上的.所以两者没有直接的关系,禁用 ...

  4. Windows下安装Nginx反向代理服务器

    一,首先到 Nginx官方网站下载最新版本,下载网址: http://nginx.org/en/download.html 二,解压ZIP包,目录修改为nginx.放置在D盘根目录下,也可以放置在其它 ...

  5. Ajax的封装03

    一.Ajax   1.原理:基于http协议的     内置对象:XMLHttpRequest 发起请求 那会相应     步骤: var xhr=new XMLHttpRequest(); // 请 ...

  6. Python:利用内建函数将字符串转化为整数

    使用内建函数raw_input()内建函数,它读取标准输入,并将读取到的数据赋值给指定的变量.我们可以使用int()内建函数将用户输入的字符串转换为整数: >>> user = ra ...

  7. C# 小例子

    数组冒泡排序(升序排序): , , , , , , , , , , , }; //第一种 ; i < num.Length - ; i++) { ; j < num.Length - i ...

  8. Eculid算法 以及Extend_Eculid算法 证明及实现

    Eculid算法  欧几里得算法 证明: 设两数a,b(a<b). 令c=gcd(a,b) . 则 设a=mc, b=nc . 所以 r= r =a-kb=mc-knc=(m-kn)c  . 所 ...

  9. python实现监控URL的一个值小于规定的值--邮件报警

    监控URL的一个值小于规定的值--邮件报警 #!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'liudong' import urll ...

  10. django框架的models

    在django的框架设计中采用了mtv模型,即Model,template,viewer Model相对于传统的三层或者mvc框架来说就相当对数据处理层,它主要负责与数据的交互,在使用django框架 ...