提前感谢您的帮助。
假设我有一个多 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
执行的单例扩展为您提供所需的结果。