speeding up a function
Ältere Kommentare anzeigen
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 Kommentare
John D'Errico
am 20 Nov. 2015
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:
Akzeptierte Antwort
Weitere Antworten (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 Kommentare
Mohammad Abouali
am 20 Nov. 2015
Bearbeitet: Mohammad Abouali
am 20 Nov. 2015
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
am 20 Nov. 2015
no, it is much better. dec2bin used to return str which needed some fixing. But de2bi returns numerics.
Kategorien
Mehr zu Data Type Conversion finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!