Substract a vector from a matrix in Octave

Fri 21 October 2011
  • 把戏 tags:
  • math
  • octave published: true comments: true

假设你有一个矩阵:

[cc lang="text"]
A = [1,2;3,4;5,6]
[/cc]

以及一个矢量:

[cc lang="text"]
B = [2,5]
[/cc]

你希望对A的每一行元素对元素地减B,例如第一行
[cc lang="text"]
[1-2,2-5]
[/cc]

但你不希望用循环完成这个工作,那么你可能想到利用B创建一个和A一样维度的矩阵然后进行.-:
[cc lang="text"]
C = [2,5;2,5;2,5]
A .- C
[/cc]

在Octave中可以利用repmat这个函数获得C:
[cc lang="text"]
C = repmat(B, length(A), 1)
[/cc]
但是对于大矩阵来说这是一种对内存的浪费。

更好的方法是利用bsxfun:
[cc lang="text"]
bsxfun(@minus, A, B)
[/cc]

bsxfun在octave的文档中似乎鲜有提及。