Please Speed UP This Algoritm!!!
1 回表示 (過去 30 日間)
古いコメントを表示
hi i'd like to know if there's is a way to speed up this algoritm where:, lphi is a vector of 120 elements, IN4 is a matrix of 4x8192, aaa is a 3D matrix of 4x8192x120
for k = 1:lphi;
B4(k,:) = sum(IN4.*aaa(:,:,k));
end
B = sum(abs(B4).^2,2);
thanks, i don't know if in c++ it work faster any ideas?
2 件のコメント
the cyclist
2012 年 2 月 13 日
It's not clear to me what your loop does. You say that lphi is a vector, but then you loop over k=1:lphi. That seems odd to me, and not really what you want.
採用された回答
Jonathan Sullivan
2012 年 2 月 13 日
B4 = reshape(permute(bsxfun(@tims,IN4,aaa),[3 1 2]),size(aaa,3),[]);
B = sum(abs(B4).^2,2);
4 件のコメント
Sean de Wolski
2012 年 2 月 13 日
Like, I said, this does not produce correct results, nor does it work as written. PERMUTEing a big array will likely never be faster than a well written for-loop.
その他の回答 (2 件)
Sean de Wolski
2012 年 2 月 13 日
bsxfun is lurking (update: and staying hidden)!
The fastest I could get it was to dynamically preallocate your for-loop.
for k = 120:-1:1
B5(k,:) = sum(IN4.*aaa(:,:,k));
end
B2 = sum(abs(B5).^2,2);
James Tursa
2012 年 2 月 13 日
Another option you can try using some FEX submissions (slightly better at memory management than your original code):
uninit; % One time only, to built the mex routine
mtimesx; % One time only, to build the mex routine
B4 = uninit(8192,1,lphi); % Fast create variable
for k = 1:lphi;
B4(:,:,k) = sum(IN4.*aaa(:,:,k)).'; % Contiguous result
end
B = mtimesx(B4,'t',B4,'speedomp'); % Fast nD dot product
B = B(:); % Reshape result to column
You can find uninit and mtimesx here:
Note: This won't give exactly the same answer as the MATLAB code because the last dot product operation is done internally in mtimesx differently from MATLAB.
Q: Is everything real? What is the point of the abs( )?
3 件のコメント
James Tursa
2012 年 2 月 13 日
In that case use 'c' instead of 't' in the mtimesx call. E.g.,
B = mtimesx(B4,'c',B4,'speedomp');
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!