#python #pandas
Имеется следующий результат вычислений: 1.103567 -0.015367 0.000616 -0.023323 1.138369 -0.018582 -0.003442 0.004548 1.195153 Устройство преобразует эти числа следующим образом: [1.104, -0.01537, 0.000616, -0.02332, 1.138, -0.01858, -0.003442, 0.004548, 1.195] Для дальнейшей работы необходимо сравнивать вычисления и числа внутри устройства, поэтому возникла потребность в округлении результатов вычислений так же, как это делается на устройстве. Round не даёт удовлетворительного результата. где m это DataFrame.
Ответы
Ответ 1
Товарищ в комментариях подсказал еще один хороший способ, который при больших массивах данных гораздо более предпочтителен: Итак, у нас имеется результат вычислений m и данные с устройства newmatrix. Их необходимо сравнить. import numpy as np import pandas as pd m 0 1 2 0 1.099394 -0.015754 0.006890 1 -0.025979 1.119590 -0.002269 2 -0.021262 0.005393 1.191073 type(m)newmatrix [1.099, -0.01575, 0.00689, -0.02598, 1.12, -0.002269, -0.02126, 0.005393, 1.191] type(newmatrix) Приводим newmatrix к формату DataFrame mat=np.array(newmatrix) mat=mat.reshape((3,3)) mat=pd.DataFrame(mat) mat 0 1 2 0 1.09900 -0.015750 0.006890 1 -0.02598 1.120000 -0.002269 2 -0.02126 0.005393 1.191000 И затем одной функцией производим сравнение: numpy.allclose(m, mat, 1e-3,0) True Ответ 2
Для ваших данных накидал рабочий вариант. import math def SpecialRaund(val, n): exponent = 0 while abs(val) < 1: val *= 10 exponent -= 1 val = round(val, n) val *= math.pow(10, exponent) return val print SpecialRaund(1.103567, 3) print SpecialRaund(-0.015367, 3) print SpecialRaund(0.000616, 3) Result: 1.104 -0.01537 0.000616 В SpecialRaund не рассматривается кейс с положительным порядком числа (в терминах мантиса-порядок). Таким образом print SpecialRaund(11035.678934, 3) Result: 11035.679 но, думаю, вы идею поняли и легко допишите эту функциюОтвет 3
Наткнулся на такой способ: float('%.4g' % 1.195153) 1.195 проверил на всех числах, как раз то, что было нужно
Комментариев нет:
Отправить комментарий