Implementação bsxfun na multiplicação de matrizes
Como sempre tentando aprender mais com você, esperava receber ajuda com o código a seguir.
Eu preciso realizar o seguinte:
1) Eu tenho um vetor:
x = [1 2 3 4 5 6 7 8 9 10 11 12]
2) e uma matriz:
A =[11 14 1
5 8 18
10 8 19
13 20 16]
Eu preciso ser capaz de multiplicareach
valor dex
comevery
valor deA
, isso significa:
new_matrix = [1* A
2* A
3* A
...
12* A]
Isso vai me dar issonew_matrix
de tamanho(12*m x n)
assumindoA (mxn)
. E neste caso(12*4x3)
Como posso fazer isso usandobsxfun
do Matlab? e, esse método seria mais rápido que umfor-loop
?
Em relação ao meufor-loop
, Também preciso de ajuda aqui ... Não consigo armazenar cada"new_matrix"
como o loop é executado :(
for i=x
new_matrix = A.*x(i)
end
Desde já, obrigado!!
EDIT: Após as soluções dadas
Primeira solução
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
Resultado:
Elapsed time is 7.597939 seconds.
Segunda solução
clear all
clc
x=1:0.1:50;
A = rand(1000,1000);
tic
Ps = kron(x.',A);
toc
Resultado:
Elapsed time is 48.445417 seconds.