如何圆化numpy数组?

2024-09-27 20:19:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个numpy数组,如下所示:

data = [  1.60130719e-01,   9.93827160e-01,   3.63108206e-04]
np.around(data,2) # doesn't work any alternatives ?

上面的值我想取2个小数点。

我看到了np.around,它只为单个值工作,而不是整个数组。

在numpy中是否有一些简单的工作,或者我需要使用np.around编写自己的函数?

更新- 数组不是np Array,在像np.Array一样导入后,它正在工作。


Tags: 函数numpydatanpany数组arrayaround
2条回答

如果你想输出

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和负值的一般解决方案,您可以执行以下操作:

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

你可以用任何一个

np.round(data, 2)

或者

np.around(data, 2)

因为它们是等价的。


^{} documentation指向documentation for ^{}

numpy.around(a, decimals=0, out=None)

Evenly round to the given number of decimals.


您认为上述方法不起作用的原因是您导入numpy的方式。在您的第一个示例中,您仅用array(...)定义arrays。但是,然后尝试使用np.round(...)

必须坚持使用*将所有方法导入到全局命名空间中,或者最好使用文档标准,通过导入为np

from numpy import *  #bad
import numpy as np   #good

如果您尝试在不同的代码中使用np.some_func(...)和只使用some_func(...)之间进行交换,将会造成很多混乱。导入为np是一种方法。


参考文献:

相关问题 更多 >

    热门问题