将向量添加到多维数组matlab

时间:2014-12-08 22:26:54

标签: arrays performance matlab matrix bsxfun

提前感谢您的帮助。

假设我有一个多D数组x,那么

x(:,:,1) = [1 2; 3 4];
x(:,:,2) = [5 6; 7 8];

和矩阵y使得

y = [1 2; 5 6];

我想将第一行y添加到x(:,:,1)的每一行,将第二行y添加到x(:,:,2)的每个元素。这将生成一个数组z,使

z(:,:,1) = [2 4; 4 6];
z(:,:,2) = [10 12; 12 14];

实际上(不是我给出的例子)我想在一个非常大的多D数组x和一个非常大的矩阵y上进行这个操作。因此,我希望尽可能高效地完成这项工作。

天真的方法是使用for循环来做到这一点,但这不会有效。我相信一种有效的方法是将bsxfun纳入其中,但我还没有能够找到一种方法。只要生成相同的z,y和x就可以重构以完成此任务,最重要的是,构建z所需的时间少于for循环方法。

我能够找到this来做我想要的,但仅用于乘法而不是求和。我可以修改这段代码来做我想做的事情,但我感觉好像总结一下,必须有一个更简单的方法。

1 个答案:

答案 0 :(得分:3)

您只需要bsxfun和一点permute

z = bsxfun(@plus, x, permute(y, [3 2 1]));

关键是要正确重新排列y的尺寸,以便bsxfun执行的单身扩展能够为您提供所需的结果。