如何解决广播类似于Numpy的Armadillo矩阵运算的最佳方法
考虑矩阵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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。