What is the fastest, circshift or indices ?
5 次查看(过去 30 天)
显示 更早的评论
Hi
I'm trying to improve the efficiency of my algorithm. I need to compute something like :
Y(2:end-1,:) = X(2:end-1,:) + X(1:end-2,:) - X(3:end,:)
For Y and X n by m matrices. I was wondering if it was faster to do it as it is above, or using circshift :
Y = X + circshift(X,[-1,0]) - circshift(X,[+1,0]).
I've done a few tests but I can't get a clear idea... The aim is to do this on pretty big matrices on a cluser with multiple cores...
Any idea ? Thanks.
Stéphane
1 个评论
Adam
2014-11-5
I regularly create small test scripts with as many alternative implementations as I can think of, each wrapped in a
timeit(f)
instruction for function handle, f. It is extremely useful for improving understanding as well as getting the (hopefully conclusive) final answer as to which method is fastest. Sounds like you did kind of do that though...
采纳的回答
Matt J
2014-11-5
编辑:Matt J
2014-11-5
Just use conv2
Y=conv2(X,[-1;1;1],'valid');
As for circshift, it is not a builtin function and, if you look inside it
>>type circshift
you will see that it does pretty much the same indexing as you are doing. So, I wouldn't expect it to be a competitive approach.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Fourier Analysis and Filtering 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!