Как объединить массив 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, он работал.

Ответ 1

Вы можете использовать любой

np.round(data, 2)

или

np.around(data, 2)

как они эквивалентны.


Документация round указывает на документацию для around:

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

Равномерно округлить до указанного числа десятичных знаков.


Причина, по которой вы думаете, что вышеописанные методы не работают, заключается в том, что вы импортировали numpy. В первом примере вы определяете arrays только с помощью array(...). Тем не менее, вы затем пытаетесь использовать np.round(...)!

Вы должны придерживаться импорта всех методов в глобальное пространство имен с помощью *; или предпочтительно использовать стандарт документации через импорт как np:

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

Если вы попытаетесь обменяться между использованием np.some_func(...) и просто some_func(...) в другом коде, это приведет к путанице. Импортировать как np - путь.


Ссылки:

Ответ 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