Потеря точности в numpy.linspace при включении конечной точки - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь перебрать произведение двух оконных linspace, чтобы исследовать пространство.Когда я включаю конечную точку, я, похоже, теряю точность linspace.Я как-то искажаю типы?Есть ли что-то в numpy, чтобы сделать это, что предпочтительнее?

Вот некоторый демонстрационный код.Я обновил numpy в надежде на исправление, но это не помогло (1.16.4, python 3.7.3).

import numpy as np
import itertools

# Windowing func from old itertools docs
def window(seq, n=2):
    "Returns a sliding window (of width n) over data from the iterable"
    "   s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ...                   "
    it = iter(seq)
    result = tuple(itertools.islice(it, n))
    if len(result) == n:
        yield result
    for elem in it:
        result = result[1:] + (elem,)
        yield result

for (a,b) in itertools.product(window(np.linspace(12, 13, 10, endpoint=False)), window(np.linspace(20,21,10, endpoint=False))):
    print(a, b)
for (a,b) in itertools.product(window(np.linspace(12, 13, 10, endpoint=True)), window(np.linspace(20,21,10, endpoint=True))):
    print(a, b)

Без конечной точки:

(12.0, 12.1) (20.0, 20.1)
(12.0, 12.1) (20.1, 20.2)
(12.0, 12.1) (20.2, 20.3)
...

С конечной точкой:

(12.0, 12.11111111111111) (20.0, 20.11111111111111)
(12.0, 12.11111111111111) (20.11111111111111, 20.22222222222222)
(12.0, 12.11111111111111) (20.22222222222222, 20.333333333333332)
...

1 Ответ

0 голосов
/ 24 июня 2019

В выводе linspace, который вы хотите, есть 11 элементов, но вы просите 10. Попросите 11.

...