如何按元素将矩阵的列除以向量的元素?

How can I divide columns of a matrix by elements of a vector, element-wise?

给定一个矩阵和一个向量

A = [ 1 2; 2 4 ];
v = [ 2 4 ];

如何将矩阵的每一列除以向量的相应元素?下面的矩阵应该是

[ 1/2 2/4; 2/2 4/4 ]

基本上我想应用按列操作,每列的操作数存储在一个单独的向量中。

bsxfun 与正确的除法 (rdivide) 运算符一起使用并利用广播:

>> A = [ 1 2; 2 4 ];
>> v = [ 2 4 ];
>> out = bsxfun(@rdivide, A, v)

out =

    0.5000    0.5000
    1.0000    1.0000

bsxfun 的美妙之处在于,在这种情况下,v 的值将被复制到与 A 中一样多的行,并且它将执行一个元素用这个临时复制矩阵明智地除以 A.

中的值

您应该使用 rdivide and bsxfun:

的组合
A = [ 1 2; 2 4 ];
v = [ 2 4 ];
B = bsxfun(@rdivide, A, v);

rdivide 负责每个元素的划分,而 bsxfun 确保维度相加。您可以通过

之类的方式获得相同的结果
B = A ./ repmat(v, size(A,1), 1)

但是,使用 repmat 会导致内存使用量增加,这就是 bsxfun 解决方案更可取的原因。