如何在Matlab中执行这种矩阵划分?

时间:2012-11-21 10:45:56

标签: matlab linear-algebra

这个问题可能与Matlab关系不大,而与矩阵代数有关(我大多数时候忘记了我的大学课程)。假设我有m x n矩阵Xm 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

4 个答案:

答案 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