How to extract leading non-zero digit?
Mostrar comentarios más antiguos
I'm working on a research problem related to Benford's Law which states that the distribution of leading digits is not random. This is probably because many things grow logarithmically. I am trying to extract the leading digit from these vectors below:
10 --> 1
13 --> 1
0.3 --> 3
-4 --> 4
-5 --> 5
-0.006 --> 6
Input will be a vector
x = [1 0.3 -2 0.001 -0.0006, 582398, 3020];
Output should be
y = [1 3 2 1 6 5 3];
Any help?
Respuesta aceptada
Más respuestas (3)
Ned Gulley
el 11 de En. de 2011
You'll probably need to do some kind of textual manipulation. Here's one way to do it.
function y = leadingDigit(x)
s = sprintf('%1.2e\n',abs(x));
y = s(1:(length(s)/length(x)):end)-48;
end
Daniel Shub
el 28 de Jun. de 2012
2 votos
Is this really the first question on Answers? I was going to use our new magic power and start accepting answers. The only problem is I think there is now a better answer to this question on Loren's blog.
1 comentario
Jan
el 28 de Jun. de 2012
I thought of accepting this answer, because it contains a link to good solutions. But actually the method shown by Walter hits the point (and is found in this blog also). Ned's method is more efficient than STR2DOUBLE, but a clean numerical approach is moire direct for a numerical question.
Oleg Komarov
el 5 de Sept. de 2012
regexp(num2str(x), '(?<=(^|\s+)[\-\.0]*)[1-9](?=[\d\.]*)', 'match')
1 comentario
Asif Newaz
el 22 de Nov. de 2019
can u explain the 'expression'... i've found regexp quite complicated but very useful
Categorías
Más información sobre Data Type Conversion en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!