问题描述
考虑矩阵A和B,其中A是5x5
矩阵,B是1x5
矩阵(或行向量)。如果我尝试在Numpy中执行A + B
,则其广播功能将隐式创建一个5x5
矩阵,其中每行具有B的值,然后在这两个矩阵之间进行常规矩阵加法。可以这样用Armadillo编写;
mat A = randu<mat>(4,5);
mat B = randu<mat>(1,5);
A + B;
但这失败了。而且我查看了文档,找不到内置的广播方式。因此,我想知道进行上述操作的最佳(最快)方法。
当然,我可以手动将较小的矩阵调整为较大的矩阵,并使用for循环将第一行值复制到其他行,并在Armadillo中使用重载的+
运算符。但是,我希望有一种更有效的方法来实现这一目标。任何帮助将不胜感激!
解决方法
扩展Claes Rolen的注释。犰狳中的矩阵广播是使用.each_col()和.each_row()完成的。 cubes的广播是通过.each_slice()完成的。
mat A(4,5,fill::randu);
colvec V(4,fill::randu);
rowvec R(5,fill::randu);
mat X = A.each_col() + V; // or A.each_col() += V for in-place operation
mat Y = A.each_row() + R; // or A.each_row() += R for in-place operation
cube C(4,2,fill::randu);
cube D = C.each_slice() + A; // or C.each_slice() += A for in-place operation