微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决广播类似于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 举报,一经查实,本站将立刻删除。