armadillo c ++:用向量乘以矩阵的每一行的高效简洁方法?

时间:2014-02-19 18:45:59

标签: c++ vector matrix armadillo

我想知道是否有一种有效而简洁的方法来通过向量对Armadillo C ++矩阵的每一行(或列)进行逐元素乘法。行(或列)和向量的大小相同。

例如,IF fmat :: each_row()(和/或each_col())可以用作右值,我想要这样的东西进行编译(目前它不会编译):

#include <armadillo>

int main()
{
    using namespace arma;

    fmat m(20, 10);
    fvec v(10); // a column vector

    m.each_row() % v.t(); // Currently a compiler error.

    return 0;
}

2 个答案:

答案 0 :(得分:3)

从Armadillo 5.6版开始,.each_col().each_row()方法被扩展为处理不合适的操作。因此,建议的方法

m.each_row() % v.t();

应编译,请参阅http://arma.sourceforge.net/docs.html#each_colrow

答案 1 :(得分:2)

看起来你正在使用错误的运算符。根据{{​​3}}的文档,您需要指定就地操作(例如+ =, - =,/ =,%=)。换句话说,使用%=代替%,如下所示:

m.each_row() % v.t();    // wrong

m.each_row() %= v.t();   // right

除了就地操作外,.each_row()和.each_col()的唯一允许操作本身就是“=”。