问题 如何圆numpy数组?


我有一个像下面这样的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数组,导入后像np.array一样工作。


3770
2017-10-28 20:59


起源

np.round(data,2)? - Divakar
你的例子很好用。 “不起作用”是什么意思? - randomir
np.round 相当于 np.around 并且都适用于整个阵列。 - Alex Riley
你究竟想要圆形输出到底是什么? - jmd_dk


答案:


你可以使用:

np.round(data, 2)

要么:

np.around(data, 2)

像他们那样 当量


文件

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

均匀圆 a 到给定的小数位数。


您认为上述方法不起作用的原因是您导入的方式 numpy

从您的第一个示例开始,您似乎导入了:

from numpy import *

正如你所定义的那样 arrays 只是 array(...)。但是,然后尝试使用 np.round(...)

必须 依照 importing 它与 * 或者作为 np 通过:

import numpy as np

如果您尝试在使用之间进行交换 np.some_func(...) 只是 some_func(...) 你会在某个时候抛出错误。您可能被其他答案或文档误导为 标准是使用 numpy 如 np


12
2017-10-28 21:02



数组不是np数组,导入后像np.array一样工作 - ajayramesh


如果你想要输出

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

2
2017-10-28 21:19



这或多或少是我想要的。运用 np.around 代替 round 将使它适用于多维数组。 - user121664