How to extract leading non-zero digit?
11 ビュー (過去 30 日間)
古いコメントを表示
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?
0 件のコメント
採用された回答
Walter Roberson
2011 年 1 月 20 日
The answer is complicated because numbers such as 0.0006 have no exact representation in binary floating point number, and the closest number that can be represented might not have the same leading binary digit.
If one does NOT take that factor in to account, then:
y = floor(abs(x) ./ 10.^floor(log10(abs(x))));
2 件のコメント
その他の回答 (3 件)
Ned Gulley
2011 年 1 月 11 日
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
0 件のコメント
Daniel Shub
2012 年 6 月 28 日
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 件のコメント
Jan
2012 年 6 月 28 日
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
2012 年 9 月 5 日
regexp(num2str(x), '(?<=(^|\s+)[\-\.0]*)[1-9](?=[\d\.]*)', 'match')
1 件のコメント
Asif Newaz
2019 年 11 月 22 日
can u explain the 'expression'... i've found regexp quite complicated but very useful
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!