我有Xtrain
(m x d
)矩阵,有Y
(m x 1
)向量,我想将i
第th行Xtrain
乘以Y(i)
。
我是用for循环完成的,但是我敢肯定有一种更有效的方法。
X = zeros(m,d);
for i = 1 : m
X(i,:) = Xtrain(i, :) * Y(i);
end
用途bsxfun
:
%dummy input
m=5;
d=3;
Xtrain = rand(m,d);
Y = rand(m,1);
X2 = bsxfun(@times,Xtrain,Y); %is of size [m,d]
%compare to original
X = zeros(m,d);
for ii = 1 : m %don't use i as a variable in matlab '
X(ii,:) = Xtrain(ii, :) * Y(ii);
end
all(X(:)==X2(:)) %returns 1
bsxfun
指函数的“二进制单例展开”,在我们的情况下是用于乘法的二进制函数times
。单例扩展表示复制一个数组的单例尺寸以匹配另一个数组的相应尺寸:将[m,d]
数组与[m,1]
一个数组相乘,其方式是将相同的值Y
用于输出的每一列。这正是您所需要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句