Vectorized code not faster
Informazioni
Questa domanda è chiusa. Riaprila per modificarla o per rispondere.
Mostra commenti meno recenti
Hello, i had the following code:
for i=1:length(rho);
for j=i:length(theta);
PolarImage(j,i)=diag(CartImage(Y(i,j),X(i,j)));
end
end
Elapsed time is 0.019816 seconds
I changed it to:
for i=1:length(rho);
PolarImage(:,i)=diag(CartImage(Y(i,:),X(i,:)));
end
Elapsed time is 0.093083 seconds
I do not understand, why the vectorized code is a lot slower than the previous one. does anyone know an efficient way, for faster calculation? thanks ahead, Bart
3 Commenti
Walter Roberson
il 20 Nov 2015
Is CartImage a matrix or a function? If it is a matrix then CartImage(Y(i,j),X(i,j)) would be a single value and diag() of a single value is just going to be the value, so it is not clear why you would bother. If CartImage is a function then we need more information about what it computes.
Bart van Essen
il 20 Nov 2015
Walter Roberson
il 20 Nov 2015
What value are you expecting diag(CartImage(Y(i,j),X(i,j))) to be that is different from CartImage(Y(i,j),X(i,j)) ?
Risposte (1)
Walter Roberson
il 20 Nov 2015
for i = 1:length(rho)
idx = sub2ind(size(CartImage), Y(i,:), X(i,:));
PolarImage(:,i) = CartImage(idx);
end
Or to be more efficient:
nrow = size(CartImage,1);
for i = 1:length(rho)
PolarImage(:,i) = CartImage( (X(i,:) - 1) * nrow + Y(i,:) );
end
2 Commenti
Bart van Essen
il 20 Nov 2015
Modificato: Bart van Essen
il 20 Nov 2015
Walter Roberson
il 20 Nov 2015
nrow = size(CartImage,1);
PolarImage = CartImage( (X - 1) * nrow + Y ) .';
Questa domanda è chiusa.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!