Vectorized code not faster
정보
이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.
이전 댓글 표시
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
Walter Roberson
2015년 11월 20일
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
2015년 11월 20일
Walter Roberson
2015년 11월 20일
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)) ?
답변 (1개)
Walter Roberson
2015년 11월 20일
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
Bart van Essen
2015년 11월 20일
편집: Bart van Essen
2015년 11월 20일
Walter Roberson
2015년 11월 20일
nrow = size(CartImage,1);
PolarImage = CartImage( (X - 1) * nrow + Y ) .';
이 질문은 마감되었습니다.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!