从Matlab到C ++特征矩阵运算 - 向量归一化

时间:2017-03-11 21:50:45

标签: c++ matlab eigen matrix-multiplication

将一些Matlab代码转换为C ++。

问题(如何使用C ++):

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

  2. 规范化每个数组(“pts”col)除以第3个值

  3. 1和2的Matlab代码:

    % 1. A 3x1 vector. d0, d1 double.
    B = [d0*A (d0+d1)*A]; % B is 3x2
    
    % 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. 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);
    }
    

    编辑: 我希望现在问题更清楚了。

1 个答案:

答案 0 :(得分:2)

对于#2:

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

只有数组具有为行和列部分缩减定义的乘法和除法运算符。将数据分配回C

时,数组会转换回矩阵