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!