如何按元素将矩阵的列除以向量的元素?
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
.
中的值
的组合
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
解决方案更可取的原因。
给定一个矩阵和一个向量
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
.
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
解决方案更可取的原因。