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

Vin*_*nce 8 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;
}
Run Code Online (Sandbox Code Playgroud)

Sva*_*erg 5

从 Armadillo 5.6 版本开始,.each_col().each_row()方法被扩展以处理异地操作。因此你建议的方法

m.each_row() % v.t();
Run Code Online (Sandbox Code Playgroud)

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


mta*_*all 3

您似乎使用了错误的运算符。根据.each_row() 和 .each_col()的文档,您需要指定就地操作(例如 +=、-=、/=、%=)。换句话说,使用 %= 代替 %,如下所示:

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

m.each_row() %= v.t();   // right
Run Code Online (Sandbox Code Playgroud)

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