小编Mr.*_*Guo的帖子

eigen 是否有像 H.transpose()*H 这样的自转置乘法优化

我浏览了 eigen 的教程 https://eigen.tuxfamily.org/dox-devel/group__TutorialMatrixArithmetic.html

它说“注意:对于担心性能的 BLAS 用户,诸如 c.noalias() -= 2 * a.adjoint() * b; 之类的表达式已完全优化并触发单个类似 gemm 的函数调用。”

但是像 H.transpose() * H 这样的计算怎么样,因为它的结果是一个对称矩阵,所以它应该只需要正常 A*B 一半的时间,但在我的测试中, H.transpose() * H 花费与 H 相同的时间.transpose() * B. eigen对于这种情况有没有特殊的优化,像opencv一样,有类似的功能。

我知道对称优化会破坏矢量化,我只想知道特征是否有可以同时提供对称优化和矢量化的解决方案

optimization matrix-multiplication neon eigen

4
推荐指数
1
解决办法
1716
查看次数

对于给定的旋转,旋转矩阵是否唯一?

我发现两个旋转矩阵

rot1 = [    0.8736    0.2915   -0.3897;
           -0.4011    0.8848   -0.2373;
            0.2756    0.3636    0.8898]

rot2 = [    0.9874   -0.1420   -0.0700;
            0.0700    0.7880   -0.6117;
            0.1420    0.5991    0.7880]
Run Code Online (Sandbox Code Playgroud)

当向量相乘时

wpt = [200 200 200] 
Run Code Online (Sandbox Code Playgroud)

产生相同的结果

cpt = [155.0812 49.2660 305.8148] 
Run Code Online (Sandbox Code Playgroud)

谁能解释一下吗?

rotation computer-vision rotational-matrices

3
推荐指数
1
解决办法
4292
查看次数

奇怪的内存表现为调整大小并保留关于向量的行为

我知道reserve(n)仅分配n个空间,但大小为零。

而resize(n)分配n个空间,大小为n。

但是当我在测试中通过窗口任务管理器观察到内存变化时,我对结果感到困惑。

我的代码已经占用了100MB,然后逐步测试以下代码:

vector<Eigen::Vector4f> vec;
vec.resize(5000000); //memory still take 100MB???
vec.push_back(Eigen::Vector4f::Zero()); //memory take 181MB???
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么调整大小直到有push_back才改变内存

vector<Eigen::Vector4f> vec;
vec.reserve(5000000); //memory still take 100MB???
for(int i = 0 ; i < 5000000; i++){
    vec.push_back(Eigen::Vector4f::Zero()); // memory increase one by one from 100MB to 181MB
}
Run Code Online (Sandbox Code Playgroud)

预留也没有分配内存?为什么?

c++ stl vector eigen

1
推荐指数
1
解决办法
76
查看次数