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还是其他?
答案 0 :(得分:2)
您的直觉似乎是,如果指定了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的步长相同。
答案 1 :(得分:0)
此处look at the source会很有帮助。这将使您逐步了解函数的功能,从而使您更好地了解linspace
的输出。
使用两个参数来计算step
的大小:div
和delta
。但是,endpoint=True
和endpoint=False
之间的区别在于,如果div
,num-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