将向量添加到多维数组矩阵实验室



提前感谢您的帮助。

假设我有一个多 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,并且最重要的是,构建 z 所需的时间少于 for 循环方法,y 和 x 就可以并且可以重组以完成此任务。

能够找到这个做我想要的,但仅用于乘法而不是求和。 我可以修改此代码以执行我想要的操作,但我觉得总结一下,必须有一种更简单的方法。

你只需要bsxfun和一点点permute

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

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

相关内容

  • 没有找到相关文章

最新更新