bsxfun在矩阵乘法中的实现

Ser*_*ram 7 performance matlab matrix matrix-multiplication bsxfun

一如既往地想从你身上学到更多东西,我希望能通过以下代码获得一些帮助.

我需要完成以下任务:

1)我有一个向量:

x = [1 2 3 4 5 6 7 8 9 10 11 12]
Run Code Online (Sandbox Code Playgroud)

2)和矩阵:

A =[11    14    1
    5     8    18
    10    8    19
    13    20   16]
Run Code Online (Sandbox Code Playgroud)

我需要能够将eachxevery值相乘A,这意味着:

new_matrix = [1* A
              2* A
              3* A
               ...
              12* A]
Run Code Online (Sandbox Code Playgroud)

这将给我这个new_matrix大小(12*m x n)假设A (mxn).在这种情况下(12*4x3)

我怎么能用bsxfunmatlab 做这个呢?并且,这种方法会比一个快for-loop吗?

关于我for-loop,我在这里也需要一些帮助...我无法存储每个"new_matrix"循环运行:(

for i=x
new_matrix = A.*x(i)
end
Run Code Online (Sandbox Code Playgroud)

提前致谢!!

编辑:解决方案给出后

第一解决方案

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
Run Code Online (Sandbox Code Playgroud)

输出:

Elapsed time is 7.597939 seconds.
Run Code Online (Sandbox Code Playgroud)

二解决方案

clear all
clc
x=1:0.1:50;
A = rand(1000,1000);
tic
Ps = kron(x.',A);
toc
Run Code Online (Sandbox Code Playgroud)

输出:

Elapsed time is 48.445417 seconds.
Run Code Online (Sandbox Code Playgroud)

Div*_*kar 17

发送x到第三维,以便单用扩展在bsxfun用于乘法时生效A,将产品结果扩展到第三维.然后,执行bsxfun乘法 -

val = bsxfun(@times,A,permute(x,[3 1 2])) 
Run Code Online (Sandbox Code Playgroud)

现在,val是一个3D矩阵,期望的输出预期是2D沿着第三维的列连接的矩阵.这是在下面实现的 -

out = reshape(permute(val,[1 3 2]),size(val,1)*size(val,3),[])
Run Code Online (Sandbox Code Playgroud)

希望有道理!传播这个bsxfun词!呜!:)


Lui*_*ndo 10

kron功能正是如此:

kron(x.',A)
Run Code Online (Sandbox Code Playgroud)