2

这个问题可能与 Matlab 的关系不大,而与矩阵代数有关(我在大学课程中大多忘记了)。假设我有一个m x n矩阵X和一个m x 1矩阵B。我将如何除以使得XX的第 th 行的B所有元素i都被 B 的第 th 行分段除以i产生另一个m x n矩阵Y

例如

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

4 回答 4

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
于 2012-11-21T11:12:48.767 回答
1

Junuxx 的评论为我指明了正确的方向。我用来得到我想要的解决方案是:

B_prime = repmat(B,1,3)

X ./ B_prime

ans =

 1     2     4
 1     3     9
 1     4    16

我仍然想知道这种操作叫什么(如果它甚至有正式名称)。

于 2012-11-21T10:59:18.310 回答
0

X 是m x n,B 是m x 1

size(X,2)给出 n 的值,即列数

所以,你需要这样做:

X./repmat(B,1,size(X,2))
于 2012-11-21T11:19:33.860 回答
0

X = [2 4 8; 3 9 27;4 16 64]

B = [2; 3;4]

结果= X./ B(:,ones(1,3)) % 比 repmat 快

结果 =

 1     2     4
 1     3     9
 1     4    16
于 2012-11-21T16:20:50.810 回答