Numpy, округление значения полиномиальной функции дает разные результаты - PullRequest
0 голосов
/ 19 марта 2020

Я испытываю странное поведение при использовании полиномиальной подгонки. Когда я округляю результат вызова объекта np.poly1d , я получаю другой результат, чем если бы я округлял это число специально. Вниз вы можете увидеть пример кода, с которым у меня проблемы. В назначении center_power вызов p (center_angle) возвращает -0,0, округляется до 0, и если I go в репле и сделать round (-0,0, 5) Я получаю возврат 0. Однако, когда выполняется вызов round (p (center_angle), 5) , который оценивается как - 0.25974.

Любое объяснение, почему это странное поведение?

enter image description here

angles = np.linspace(-10, 10, 21)
el = np.zeros(21,)
power = np.concatenate((np.linspace(-10, 0, 11),
                         np.linspace(-1, -10, 10)))

    poly = fit_polynomial(power, angles, 3)

p = np.poly1d(poly)
q = p.deriv() #Get the derivative
roots = np.roots(q) #Roots of derivative indicate where reaches 0 and power is max

#Get center point
center_angle = round(roots[-1].real, 5)

#This is where the center_power is different than what I expect
center_power = round(p(center_angle), 5)


def fit_polynomial(power: List[float], angles: List[float], bandwidth: float):

    index, max_value = _get_index_and_value_of_max(power)
    if index == 0 or index == len(power)-1 :
         raise ValueError("Power peak detected at edge of main beam segment.")

    #because python does slicing by item cound instead of index
    split_count = index+1
    left_half = power[:split_count]
    right_half = power[split_count:]

    side_range = max_value - bandwidth
    left_point = _closest(left_half, side_range)
    right_point = _closest(right_half, side_range)

    #Subset data at cutoff distance left and right of the max power value
    signal_subset = power[left_point[0]:len(left_half)+right_point[0]+1]
    positions_subset = angles[left_point[0]: len(left_half)+right_point[0]+1]
    z = np.polyfit(positions_subset, signal_subset, 4)
    return z
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...