- 把戏 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的文档中似乎鲜有提及。