关于从Matlab到C Eigen矩阵运算:从Matlab到C Eigen矩阵运算-向量归一化 | 珊瑚贝

From Matlab to C++ Eigen matrix operations – vector normalization


将一些 Matlab 代码转换为 C .

问题(如何在 C 中):

  • 在一个矩阵中连接两个向量。 (已经找到解决方案)

  • 标准化每个数组(“pts” col)除以它的第三个值

  • 1 和 2 的 Matlab 代码:

    1
    2
    3
    4
    5
    6
    7
    8
    % 1. A 3×1 vector. d0, d1 double.
    B = [d0*A (d0+d1)*A]; % B is 3×2

    % 2. Normalize a set of 3D points
    % Divide each col by its 3rd value
    % pts 3xN. C 3xN.
    % If N = 1 you can do: C = pts./pts(3); if not:
    C = bsxfun(@rdivide, pts, pts(3,:));

    1 和 2 的 C 代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 1. Found the solution for that one!
    B << d0*A, (d0 + d1)*A;

    // 2.
    for (int i=0, i<N; i++)
    {
        // Something like this, but Eigen may have a better solution that I don’t know.
        C.block<3,1>(0,i) = C.block<3,1>(0,i)/C(0,i);
    }

    编辑:
    我希望这个问题现在更清楚了?2.

    • 这就是 Eigen 的用途。你有什么问题?
    • @Peter,问题是像我在matlab中那样在一行中填写B。我认为解决方案可能是 B << d0* (*A), (d0 d1)*(*A);但我还没有测试它。
    • Matlab 是高级语言,C 是低级语言。您期望 Matlab 中的一行对应于 C 中的一行是不合理的。你在每个方面都有不同的优点和缺点。
    • @Brick 是的,我知道。但是 Eigen 有很多处理矩阵的方法。我知道如何使用循环来解决这个问题,但我敢打赌 Eigen 可能有一个优化的方法来做到这一点。
    • @Pedro77 我建议将您对我的最后评论放入问题中。我不会那样理解你的问题。 (我不是投反对票,但我可以理解为什么有人可能会像目前写的那样投反对票。根本不清楚你在问什么。)
    • 同意,请让问题更清楚。可以执行的代码会有所帮助。
    • 你为什么使用指针?
    • @Bernhard 抱歉,除了 C 新手外,没有其他理由。打算更新那个。
    • FWIW Armadillo 做了 Eigen 所做的事情,但也有明确的目标,即类似于 Matlab。我都使用并且喜欢两者,但比 Eigen 更频繁地使用犰狳。


    对于#2:

    1
    C = C.array().rowwise() / C.row(2).array();

    只有数组具有为行和列部分归约定义的乘法和除法运算符。当您将数组分配回 C

    时,该数组将转换回矩阵


    来源:https://www.codenong.com/42741074/

    微信公众号
    手机浏览(小程序)

    Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

    Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

    Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_8708.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
    0
    分享到:
    没有账号? 忘记密码?