speeding up a function
이전 댓글 표시
Hi all, I have the following function that takes x which is a unit32 vector of about 2 billion elements. Basically it expands the decimal numbers and then classify each element based on the structure of the binary string:
function class = classX( x )
class=uint32(zeros(size(x)));
parfor i=1:length(x)
binary=de2bi(x(i),32);
if binary(1)==0 && binary(2)==0
class(i)=1;
elseif binary(1)==0 && binary(2)==1
class(i)=2;
end
end
I'm looking for a possible way to speed this function as much as possible. I look forward to your creative ideas.
AD
댓글 수: 2
John D'Errico
2015년 11월 20일
What is de2bi? What does it do? If I guess, then my guess will be wrong.
@John D'Errico: I assume that it is the Communications Toolbox function:
채택된 답변
추가 답변 (1개)
For a random vector of 10000 elements my code below is 30000 times faster than your code:
Elapsed time is 27.6156 seconds.
Elapsed time is 0.000999928 seconds.
And for 100000 elements it is nearly 50000 times faster:
Elapsed time is 336.889 seconds.
Elapsed time is 0.00700092 seconds.
And of course the test outputs are always exactly identical:
>> isequal(A,B)
ans = 1
This is the code:
function out = classx2(x)
out = zeros(size(x),'uint8');
out(x<pow2(30)) = 1;
out(pow2(30)<=x & x<pow2(31)) = 2;
end
댓글 수: 3
Mohammad Abouali
2015년 11월 20일
편집: Mohammad Abouali
2015년 11월 20일
Stephen, your code classifies wrongly. You need to fix the pow2.
de2bi(4)
ans =
0 0 1
so binary(1) and binary(2) are referring to pow2(0) and pow2(1); not pow2(30) and pow2(31);
Mohammad Abouali
2015년 11월 20일
no, it is much better. dec2bin used to return str which needed some fixing. But de2bi returns numerics.
카테고리
도움말 센터 및 File Exchange에서 Data Type Conversion에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!