给定矩阵和向量
A = [ 1 2; 2 4 ];
v = [ 2 4 ];
如何通过向量的相应元素划分矩阵的每一列?以下矩阵应为
[ 1/2 2/4; 2/2 4/4 ]
基本上我想应用一个逐列操作,每个列的操作数存储在一个单独的向量中。
答案 0 :(得分:4)
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
解决方案更可取的原因。
答案 1 :(得分:2)
使用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
。