向量的每个元素乘以另一个向量的每个元素

时间:2018-10-07 14:13:16

标签: matlab vector vectorization multiplication elementwise-operations

我有两个非常大的列向量AB,大小分别为ax1bx1。我想通过为每个C(b*a)x1计算A(i)*B(j)来构造一个大小为i的向量j。为了说明我的意思:

clear
a=10^3;
b=10^3;
A=randn(a,1);
B=randn(b,1);
Ctemp=zeros(a,b);
for i=1:a
    for j=1:b
        Ctemp(i,j)=A(i)*B(j);
    end
end
C=reshape(Ctemp, a*b,1);

问题:是否有一种更有效的方法来获取避免重复循环的C?我的实际ab10^3大。

2 个答案:

答案 0 :(得分:4)

这是数组乘法的一个简单例子,可以从隐式(或显式)扩展中受益:

% Implicit (R2016b and newer):
C = A(:) .* B(:).'; % optionally surround by reshape( ... , [], 1);

% "Explicit" (R2007a and newer):
C = bsxfun( @times, A(:), B(:).' );

从那里开始,只需重塑即可(D = C(:)D = C(:).')。

答案 1 :(得分:3)

您还可以计算向量的外积,从而得到所需项的矩阵:

C = A*B'; % Assuming A,B are column vectors here

然后按照所述调整输出的形状。不确定是否更有效。