我需要完成以下任务:
1)我有一个向量:
x = [1 2 3 4 5 6 7 8 9 10 11 12]
2) 以及一个矩阵:
A =[11 14 1
5 8 18
10 8 19
13 20 16]
我需要能够将
x
中的每个值与A
中的每个值相乘,这意味着:new_matrix = [1* A
2* A
3* A
...
12* A]
这将给我一个大小为
(12 * m x n)
的new_matrix
,假设A(mxn)
。在这种情况下,(12 * 4x3)
我该如何使用Matlab中的bsxfun
来实现这一点?这种方法比for-loop
更快吗?关于我的
for-loop
,我需要一些帮助......当循环运行时,我无法存储每个"new_matrix"
:(for i=x
new_matrix = A.*x(i)
end
提前感谢!
编辑:在解决方案提供后
第一个解决方案
clear all
clc
x=1:0.1:50;
A = rand(1000,1000);
tic
val = bsxfun(@times,A,permute(x,[3 1 2]));
out = reshape(permute(val,[1 3 2]),size(val,1)*size(val,3),[]);
toc
输出:
Elapsed time is 7.597939 seconds.
第二个解决方案
clear all
clc
x=1:0.1:50;
A = rand(1000,1000);
tic
Ps = kron(x.',A);
toc
输出:
Elapsed time is 48.445417 seconds.
(12*m,n)
的new_matrix
来实现,就像你自己说的那样,然后使用索引告诉new_matrix
你想要保存这些元素的位置,例如在你上面给出的代码中,new_matrix(((i-1)*12+1):(i*12))) = A.*x(i)
,我在这里写了它,所以不确定它是否有效。 - The Minion1*new_matrix
、2*new_matrix
、3*new_matrix
等等之间的东西,还有其他一些计算,我无法确定它们来自哪里。 - Sergio Harambsxfun
感兴趣的人有所帮助。 - Divakar