我有一个numpy数组,类似于下面:
data = np.array([ 1.60130719e-01, 9.93827160e-01, 3.63108206e-04])
字符串我想把每个元素四舍五入到小数点后两位我怎么能这样做呢?
daupos2t1#
Numpy提供了两个相同的方法来实现这一点。
np.round(data, 2)
字符串或
np.around(data, 2)
型因为它们是等价的。有关详细信息,请参阅文档。示例如下:
>>> import numpy as np >>> a = np.array([0.015, 0.235, 0.112]) >>> np.round(a, 2) array([0.02, 0.24, 0.11]) >>> np.around(a, 2) array([0.02, 0.24, 0.11]) >>> np.round(a, 1) array([0. , 0.2, 0.1])
型
kh212irz2#
值得注意的是,被接受的答案会将小浮点数四舍五入为零,如下所示:
>>> import numpy as np >>> arr = np.asarray([2.92290007e+00, -1.57376965e-03, 4.82011728e-08, 1.92896977e-12]) >>> print(arr) [ 2.92290007e+00 -1.57376965e-03 4.82011728e-08 1.92896977e-12] >>> np.round(arr, 2) array([ 2.92, -0. , 0. , 0. ])
字符串您可以使用set_printoptions和自定义格式化程序来解决这个问题,并获得一个小数位数更少的更numpy-esque的格式:
set_printoptions
>>> np.set_printoptions(formatter={'float': "{0:0.2e}".format}) >>> print(arr) [2.92e+00 -1.57e-03 4.82e-08 1.93e-12]
型通过这种方式,您可以获得format的全部多功能性,并保持numpy数据表的精度。还要注意,这只影响打印,而不影响用于计算的存储值的实际精度。
format
8ftvxx2r3#
如果您希望输出为
array([1.6e-01, 9.9e-01, 3.6e-04])
字符串问题并不是NumPy缺少的功能,而是这种舍入不是一个标准的事情。你可以创建自己的舍入函数,它可以像这样实现:
def my_round(value, N): exponent = np.ceil(np.log10(value)) return 10**exponent*np.round(value*10**(-exponent), N)
型对于处理0和负值的一般解决方案,您可以这样做:
0
def my_round(value, N): value = np.asarray(value).copy() zero_mask = (value == 0) value[zero_mask] = 1.0 sign_mask = (value < 0) value[sign_mask] *= -1 exponent = np.ceil(np.log10(value)) result = 10**exponent*np.round(value*10**(-exponent), N) result[sign_mask] *= -1 result[zero_mask] = 0.0 return result
3条答案
按热度按时间daupos2t1#
Numpy提供了两个相同的方法来实现这一点。
字符串
或
型
因为它们是等价的。
有关详细信息,请参阅文档。
示例如下:
型
kh212irz2#
值得注意的是,被接受的答案会将小浮点数四舍五入为零,如下所示:
字符串
您可以使用
set_printoptions
和自定义格式化程序来解决这个问题,并获得一个小数位数更少的更numpy-esque的格式:型
通过这种方式,您可以获得
format
的全部多功能性,并保持numpy数据表的精度。还要注意,这只影响打印,而不影响用于计算的存储值的实际精度。
8ftvxx2r3#
如果您希望输出为
字符串
问题并不是NumPy缺少的功能,而是这种舍入不是一个标准的事情。你可以创建自己的舍入函数,它可以像这样实现:
型
对于处理
0
和负值的一般解决方案,您可以这样做:型