行空间函数中的步长问题

时间:2018-09-13 07:47:30

标签: python python-3.x numpy

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时,endpoint = True,则要生成的等间距样本数为num = 5,即五个数字,所以有四个步骤,很容易计算出每个步骤是2.5。 但是:根据端点定义,当它为z1时,endpoint = False,如果该序列包含20,则该序列将被拒绝,但是该序列仍然是5个数字,4步长,为什么最后一个序列数是18。不是19还是其他?

2 个答案:

答案 0 :(得分:2)

您的直觉似乎是,如果指定了endpoint=False,则返回数组的最后一个元素应比停止值小1。

假设我们以这种方式实现事情。以下linspace调用返回什么?

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

以-0.5结束倒数吗?那没有多大意义。


numpy.linspace总是将startstop的间隔分成相等大小的块,并且总是返回长度为num的数组。 endpoint=Trueendpoint=False之间的区别在于,使用endpoint=False可以增加一个额外的块,以补偿遗漏正确的端点。从16到18的步长与从18到省略的20的步长相同。

答案 1 :(得分:0)

此处look at the source会很有帮助。这将使您逐步了解函数的功能,从而使您更好地了解linspace的输出。


使用两个参数来计算step的大小:divdelta。但是,endpoint=Trueendpoint=False之间的区别在于,如果divnum-1等于endpoint=True;如果{{1},则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