Improving speed in construction of a matrix
Mostra commenti meno recenti
Hi.
Im currently implementing a code, where part of the code constructs a matrix several million times. Currently, the construction of this matrix takes much more time, than the actual computing invovled with the matrix. Its a rather simple matrix, but takes a third of the total runtime. I want to construct it faster, but cant seem to bring the time down. Ive tried two approaches.
One implementation:
B = zeros(9,9);
B(1:3,1) = A(1,:);
B(4:6,2) = A(1,:);
B(7:9,3) = A(1,:);
B(1:3,4) = A(2,:);
B(4:6,5) = A(2,:);
B(7:9,6) = A(2,:);
B(1:3,7) = A(3,:);
B(4:6,8) = A(3,:);
B(7:9,9) = A(3,:);
And the other implementation:
Z = zeros(3,1);
B =[A(:,1) Z Z A(:,2) Z Z A(:,3) Z Z
Z A(:,1) Z Z A(:,2) Z Z A(:,3) Z
Z Z A(:,1) Z Z A(:,2) Z Z A(:,3)];
Both giving a inaduqate execution time. Is there a faster way to construct this type of matrix?
6 Commenti
How long is "inadequate" ?
A = rand(3,3);
B = zeros(9,9);
Z = zeros(3,1);
tic
for i = 1:100000
B(1:3,1) = A(1,:);
B(4:6,2) = A(1,:);
B(7:9,3) = A(1,:);
B(1:3,4) = A(2,:);
B(4:6,5) = A(2,:);
B(7:9,6) = A(2,:);
B(1:3,7) = A(3,:);
B(4:6,8) = A(3,:);
B(7:9,9) = A(3,:);
end
toc
tic
for i = 1:100000
B =[A(:,1) Z Z A(:,2) Z Z A(:,3) Z Z
Z A(:,1) Z Z A(:,2) Z Z A(:,3) Z
Z Z A(:,1) Z Z A(:,2) Z Z A(:,3)];
end
toc
Walter Roberson
il 16 Gen 2024
Z = zeros(3,1);
A1 = A(:,1); A2 = A(:,2); A3 = A(:,3);
B =[A1 Z Z A2 Z Z A3 Z Z
Z A1 Z Z A2 Z Z A3 Z
Z Z A1 Z Z A2 Z Z A3];
Your two implementations give different results:
A=reshape(1:9,3,3)
B = zeros(9,9);
B(1:3,1) = A(1,:);
B(4:6,2) = A(1,:);
B(7:9,3) = A(1,:);
B(1:3,4) = A(2,:);
B(4:6,5) = A(2,:);
B(7:9,6) = A(2,:);
B(1:3,7) = A(3,:);
B(4:6,8) = A(3,:);
B(7:9,9) = A(3,:)
Z = zeros(3,1);
B =[A(:,1) Z Z A(:,2) Z Z A(:,3) Z Z
Z A(:,1) Z Z A(:,2) Z Z A(:,3) Z
Z Z A(:,1) Z Z A(:,2) Z Z A(:,3)]
cTroels
il 16 Gen 2024
I think it unlikely you are going to be able to reliably optimize such an infinitessimal task in MCode. Different computers will give you different relative performance. You need to try to reorganize your computation in large vectorized batches.
cTroels
il 16 Gen 2024
Risposta accettata
Più risposte (0)
Categorie
Scopri di più su Linear Algebra in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!