Станок прецизионный кроссплатформенный с питоном - PullRequest
0 голосов
/ 03 октября 2019

Я выполняю численное моделирование и получаю различные результаты на разных платформах из-за проблем с точностью станка. В качестве простого примера (который, я думаю, на самом деле не работает, но может):

import numpy as np
np.random.seed(seed=42)
vals = np.random.rand(int(1e5))
threshold = 0.5
good_vals = np.where(vals > threshold)

Несмотря на то, что я заполнил генератор случайных чисел, могут быть значения, очень близкие к порогу, которые могут закончитьсяоценивается выше порогового значения в одной системе, а не в другой из-за различной точности станка. Есть ли стандартный способ справиться с этим?

1 Ответ

0 голосов
/ 03 октября 2019

Одним из решений является принудительное сравнение по округленным целым числам. Я могу сделать новый класс

class int_rounded(object):
    def __init__(self, inval, scale=1e5):
        self.initial = inval
        self.value = np.round(inval * scale).astype(int)
        self.scale = scale
    def __gt__(self, other):
        return self.value > other.value
    def __lt__(self, other):
        return self.value < other.value

Тогда я могу сделать сравнение

good_vals = np.where(int_rounded(vals) > int_rounded(threshold))

И это, кажется, заставляет результаты быть идентичными кроссплатформенными, но я подозреваю, что есть некоторый сбойрежимы, которые я не нажал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...