TypeError при округлении значений с плавающей точкой массива numpy - PullRequest
0 голосов
/ 14 декабря 2018

Имеется массив Numpy, состоящий из значений с плавающей запятой, например:

floatvalues = [1.3423 , 40.331 , 3.123894,
               93.3941, 1.34, 23.59]

Используемый мной массив Numpy содержит 8000 столбцов и 38 строк.Моя цель состояла в том, чтобы определить максимум каждой строки и вернуть эти максимальные значения в виде вектора.Поэтому я создал фрейм данных np.array и использовал функцию максимум.После этого я хотел округлить максимальные значения до различного количества десятичных дробей (например, десятичных = 3).Желаемый результат:

0   93.395 
1   40.332 
2   23.590

Поэтому я использовал следующий код:

import pandas as pd
import numpy as np
import math

def roundup(value, decimals=0):
    n = 10**-decimals
    return round(math.ceil(value / n) * n, decimals)

input_file = np.load("U:\\floatvalues.npy")
input_array = pd.DataFrame(input_file)
inputs_max = np.max(input_array, axis=0)

rounded_inputs_max = roundup(inputs_max, 4)
print(rounded_inputs_max)

Это привело к:

TypeError: cannot convert the series to <class 'float'>

Поэтому я попытался получить прямой доступ к максимальным значениямиз np.array, а не из DataFrame:

 input_file = np.load("U:\\floatvalues.npy)
 #input_array = pd.DataFrame(input_file)
 inputs_max = np.max(input_file, axis=0)

 rounded_inputs_max = roundup(inputs_max,4)
 print(rounded_inputs_max)

Это привело к:

TypeError: only size-1 arrays can be converted to Python scalars

Предпочтительно, я хотел бы первый способ работать с использованием DataFrame,Может кто-нибудь помочь мне, пожалуйста?Заранее спасибо.

1 Ответ

0 голосов
/ 14 декабря 2018

Это не проверено, особенно для случаев, когда arr [n] находится в правильном округлении.

In [10]: def np_roundup(arr,pl):
    ...:     factor=10**pl
    ...:     temp=arr*factor
    ...:     t_int=temp.astype(np.int32)
    ...:     rem=(temp-t_int)>0
    ...:     t_int+=rem
    ...:     return t_int/factor

Могут быть более аккуратные функции numpy.

Редактировать 18-е декабря
Есть функция numpy ceil, которую я только что заметил.

def np_roundup(arr, pl):
    factor=10**pl
    return np.ceil(arr*factor)/factor

намного аккуратнее.

HTH

...