将矩阵的第i行乘以向量的第i个元素

时间:2015-12-04 18:52:19

标签: matlab vectorization

我有Xtrainm x d)矩阵,Ym x 1)向量,我希望第iXtrainY(i)乘以X = zeros(m,d); for i = 1 : m X(i,:) = Xtrain(i, :) * Y(i); end

我用for循环做了,但我确信有更有效的方式。

{{1}}

1 个答案:

答案 0 :(得分:4)

使用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的值相同用于输出的每一列。这正是您所需要的。