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)
从 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。
您似乎使用了错误的运算符。根据.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() 唯一允许的其他操作是“=”本身。