这个问题可能与Matlab关系不大,而与矩阵代数有关(我大多数时候忘记了我的大学课程)。假设我有m x n
矩阵X
和m x 1
矩阵B
。我如何将X
除以B
,以使i
行的第X行的所有元素按行分别划分为i
行,从而产生另一行m x n
矩阵Y
?
E.g。
X = [2 4 8; 3 9 27; 4 16 64]
B = [2; 3; 4]
X ? B = [2/2 4/2 8/2; 3/3 9/3 27/3; 4/4 16/4 64/4]
ans =
1 2 4
1 3 9
1 4 16
答案 0 :(得分:11)
最好不要使用repmat
- 它很慢并为工作区分配额外的内存。您可以使用bsxfun
,这是一个内置函数,因此它更快,并避免额外的工作区:
X = [2 4 8; 3 9 27; 4 16 64]
B = [2; 3; 4]
bsxfun(@rdivide, X, B)
ans =
1 2 4
1 3 9
1 4 16
答案 1 :(得分:1)
Junuxx的评论指出了我正确的方向。我过去得到我想要的解决方案是:
B_prime = repmat(B,1,3)
X ./ B_prime
ans =
1 2 4
1 3 9
1 4 16
我仍然想知道这种操作被称为什么(如果它甚至有一个正式名称)。
答案 2 :(得分:0)
X是m x n
,B是m x 1
size(X,2)
给出n的值,即列数
所以,你需要这样做:
X./repmat(B,1,size(X,2))
答案 3 :(得分:0)
X = [2 4 8; 3 9 27; 4 16 64]
B = [2; 3; 4]
结果= X ./ B(:,(1,3))%比repmat快
结果=
1 2 4
1 3 9
1 4 16