проблема размера шага в функции строки - PullRequest
0 голосов
/ 13 сентября 2018
import numpy as np
z=np.linspace(10,20,5)
z1=np.linspace(10,20,5,endpoint=False)
print(z)
print(z1)

Первый z распечатан:

[ 10.   12.5  15.   17.5  20.]

Второй z1 распечатан:

[ 10.  12.  14.  16.  18.]

Мое замешательство: когда это z, конечная точка = True,количество сэмплов, которые должны быть сгенерированы с равным интервалом, num = 5, то есть пять чисел, так что есть четыре шага, и легко вычислить, что каждый шаг равен 2.5.Но: когда это z1, конечная точка = False, в соответствии с определением конечной точки: если последовательность содержит 20, она будет отклонена, но последовательность по-прежнему 5 чисел, 4 шага в длину, почему последнее число последовательностей 18. Не 19Или другой?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Было бы полезно посмотреть на источник здесь.Это позволит вам разобраться в том, что делает функция, что даст вам лучшее понимание вывода linspace.


. Для вычисления размера step используются два параметра: div и delta.Однако разница между endpoint=True и endpoint=False заключается в том, что div равно num-1, если endpoint=True, и num, если endpoint=False.

div = (num - 1) if endpoint else num

.другие подходящие фрагменты источника (очень уменьшенные):

delta = stop - start

y = _nx.arange(0, num, dtype=dt)

# ...

if num > 1:
    step = delta / div

# ...

y = y * step

# ...

y += start

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

endpoint=True:

div = num - 1                     # 4
y = _nx.arange(0, num, dtype=dt)  # [0, 1, 2, 3, 4]
delta = 20 - 10                   # 10
step = delta / div                # 2.5
y = y * step                      # [0.0, 2.5, 5.0, 7.5, 10.0]
y += start                        # [10.0, 12.5, 15.0, 17.5, 20.0]

endpoint=False:

div = num                         # 5
y = _nx.arange(0, num, dtype=dt)  # [0, 1, 2, 3, 4]
delta = 20 - 10                   # 10
step = delta / div                # 2
y = y * step                      # [0.0, 2.0, 4.0, 6.0, 8.0]
y += start                        # [10.0, 12.0, 14.0, 16., 18.0]
0 голосов
/ 13 сентября 2018

Кажется, ваша интуиция состоит в том, что если указано endpoint=False, то последний элемент возвращаемого массива должен быть на 1 меньше значения остановки.

Предположим, мы реализуем вещи таким образом.Что возвращает следующий linspace вызов?

numpy.linspace(0, 0.5, 5, endpoint=False)

Будет ли он заканчиваться на -0,5 с обратным отсчетом?Это не имеет большого смысла.


numpy.linspace всегда делит интервал от start до stop на куски одинакового размера и всегда возвращает массив длины num.Разница между endpoint=True и endpoint=False заключается в том, что с endpoint=False он создает один дополнительный блок для компенсации выхода из правой конечной точки.Шаг с 16 по 18 имеет тот же размер, что и шаг с 18 по 20.

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