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!