【发布时间】:2018-10-07 14:13:16
【问题描述】:
我有两个非常大的列向量,A 和 B,大小分别为 ax1 和 bx1。我想通过为每个i 和j 计算A(i)*B(j) 来构造一个大小为(b*a)x1 的向量C。为了说明我的意思:
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,避免双重循环?我实际的a 和b 比10^3 大。
【问题讨论】:
-
您使用的是哪个版本的 MATLAB?如果您使用数组乘法(
.*或bsxfun(@times, ...)并提供列向量(例如a-by-1)和行向量(例如 1-by-b),您可以获得结果想要(大小为 a*b),最多转置/reshape。 -
谢谢。如果我这样做
A.*B,我会得到C和C(i)=A(i)*B(i)。我有 Matlab 2017b,但我想要在 Matlab 2015b 上也能工作的东西。
标签: matlab vector vectorization multiplication elementwise-operations