matrix multiplication without declaring the destination matrix first

1 visualización (últimos 30 días)
hey,
I'm trying to multiply two matrices (I don't want to use any shortcuts, I want to do the multiplication by defention). can I do it without declaring first on the matrix?
what I wrote is:
C2 = zeros(N)
for i = 1:N
for j = 1:N
for k = 1:N
C2(i,j) = C2(i,j) + A(i,k)*B(k,j);
end
end
end
but the action of C2 = zeroes(N) is time consuming since N=1000 in this case. anyway to skip this declaration?
Thank you!
  3 comentarios
dpb
dpb el 29 de Oct. de 2019
C2(N,N)=0;
may be even a tiny fraction faster...whatever it takes, it's a nit in comparison to not preallocting for larger arrays.
Elinor Ginzburg
Elinor Ginzburg el 30 de Oct. de 2019
thank you very much! the problem was that without the ';' matlab printed the matrix, and it took some time.

Iniciar sesión para comentar.

Respuestas (1)

Matt J
Matt J el 29 de Oct. de 2019
Editada: Matt J el 29 de Oct. de 2019
You can loop backwards. Then the pre-allocation will be done silently.
clear C2
for i = N:-1:1
for j = N:-1:1
for k = 1:N
C2(i,j) = C2(i,j) + A(i,k)*B(k,j);
end
end
end
However, I don't know why you think the zeros command is the slow part of the code. I also don't know why you care about speed. The only reason it would make sense to do this is as a homework exercise, in which case speed should not be the issue.
  1 comentario
Elinor Ginzburg
Elinor Ginzburg el 30 de Oct. de 2019
thank you, I've found the problem - missins ';' after the zeros command. it took some time to print the matrix...

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by