【问题标题】:add vector to multi dimensional array matlab将向量添加到多维数组matlab
【发布时间】:2015-02-06 16:58:52
【问题描述】:

提前感谢您的帮助。

假设我有一个多 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,它可以满足我的需求,但仅用于乘法而不是求和。我可以修改这段代码来做我想做的事,但我总觉得必须有一个更简单的方法。

【问题讨论】:

    标签: arrays performance matlab matrix bsxfun


    【解决方案1】:

    你只需要bsxfun 和一点点permute

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

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

    【讨论】:

    • 很棒的解决方案!非常感谢
    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    相关资源
    最近更新 更多