我想获得输入new_n
的最近的基数为10的数字(例如10,100,1000)n
。例如,99
获得100
(不是10
),551
获得1000
(不是100
)。
我尝试使用np.log10
来提取输入数字n
的强大功能并使用它来为10
提供动力
import numpy as np
n = 0.09
new_n = 10**(int(round(np.log10(n))))
print new_n
n = 35
new_n = 10**(int(round(np.log10(n))))
print new_n
n = 999
new_n = 10**(int(round(np.log10(n))))
print new_n
n = 4655
new_n = 10**(int(round(np.log10(n))))
print new_n
> 0.1
> 100
> 1000
> 10000
问题是35
np.log10(n)
(我希望用作权力)的数字是1.544068
,其四舍五入为2
。结果是100
而不是10
。或4655
的结果为10000
。如何将数字四舍五入到最近的基数10?
答案 0 :(得分:2)
在获得指数后,在线性空间中添加一个回检(可能的修正):
n = np.array([0.09,35,549,551,999,4655])
e = np.log10(n).round()
#array([-1., 2., 3., 3., 3., 4.])
那么,这个数字是接近“舍入”答案还是之前的10度?
new_n = np.where(10**e - n <= n - 10**(e - 1), 10**e, 10**(e - 1))
#array([ 1.00000000e-01, 1.00000000e+01, 1.00000000e+02,
# 1.00000000e+03, 1.00000000e+03, 1.00000000e+03])
答案 1 :(得分:1)
您可以在拍摄日志之前通过缩放数字来实现您想要的效果。将每个值乘以sqrt(10) / 5.5
,您应得到所需的结果:
n = np.array([0.09,35,549,551,999,4655]) # borrowed test values from @DYZ
multiplier = np.sqrt(10) / 5.5
results = 10**np.log10(multiplier * n).round()
# array([ 1.00000000e-01, 1.00000000e+01, 1.00000000e+02,
# 1.00000000e+03, 1.00000000e+03, 1.00000000e+03])
答案 2 :(得分:0)
你可以尝试这个:
import np
new_n = 10**(np.floor(np.log10(n)-np.log10(0.5)))