Python如何借助Numpy将列表中的每个数字都保留两位有效数字

正常做法:采用Python列表来对每个数字保留N位有效数字

def round_sf(x,significant_figure=0):
    fmt="%%.%dg"%(significant_figure)
    return np.array([float(fmt%(i)) for i in x])

Numpy加速版做法:

def round_sf_np(x,significant_figure=0):
    r=np.ceil(np.log(x)/np.log(10))
    f=significant_figure
    return np.round(x*(10**(f-r)),0)*(10**(r-f))

性能对比

x=np.array([1.99355,1123,123.456,12.456789,12.9923]*10000)
%%timeit 
round_sf(x,3)
%%timeit 
round_sf_np(x,3)

Python如何借助Numpy将列表中的每个数字都保留两位有效数字_第1张图片
Python如何借助Numpy将列表中的每个数字都保留两位有效数字_第2张图片
可以获得7倍加速效果,并且结果保持一致

你可能感兴趣的:(python,numpy,开发语言,性能优化)