【问题标题】:Efficient way to subtract each vector element from matrix从矩阵中减去每个向量元素的有效方法
【发布时间】:2014-01-02 07:53:13
【问题描述】:

我有一个函数f,它应该给我一个矩阵,其中x 是从m 中减去元素明智的

m = ones(4);
f = @(x) m-x;

当我用

调用这个函数时
f(5)

一切正常。

但是我怎样才能用向量调用这个函数

f([5,7])

所以我明白了

-4    -4    -4    -4
-4    -4    -4    -4
-4    -4    -4    -4
-4    -4    -4    -4

-6    -6    -6    -6
-6    -6    -6    -6
-6    -6    -6    -6
-6    -6    -6    -6

类似于 3 维矩阵。

如果可能的话,我正在寻找最有效的方法,所以我不想使用循环。

感谢您的帮助!

【问题讨论】:

    标签: performance matlab matrix bsxfun


    【解决方案1】:

    要添加到 Luis Mendo 接受的答案,您可以使用 permute 重新排列向量的维度,如果这对您来说比 shiftdim 更直观:

    v = [5 7];
    bsxfun(@minus, m, permute(v,[3 1 2])) % 4x4x1 @minus 1x1x2 => 4x4x2
    

    使用bsxfun,就是对齐非单一维度。请注意,在进行负(右)有效移位时,您还可以使用 reshapereshape(v,[1,1,size(v)]) 一样从 1x2 转换为 1x1x1x2。

    【讨论】:

    • ...这是我周末的贡献!
    • 我敢打赌这不会是你这个周末的最后一个周末!
    【解决方案2】:

    您无需为此定义函数。只需将向量移动到第三维并使用bsxfun

    m = ones(4);
    v = [5 7];
    bsxfun(@minus, m, shiftdim(v(:),-2))
    

    【讨论】:

    • 让它看起来很容易。为了完整起见,我添加了一个带有 permute 的变体。
    猜你喜欢
    • 1970-01-01
    • 2013-12-02
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 2015-05-15
    相关资源
    最近更新 更多