广播Armadillo矩阵运算的最佳方式类似于Numpy



考虑矩阵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的注释。Armadillo中矩阵的广播是使用.eeach_col((和.eeach_row((完成的。立方体的广播是用.eeach_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, 5, 2, fill::randu);
cube D = C.each_slice() + A;  // or C.each_slice() += A for in-place operation

最新更新