为什么numpy.arange函数的start参数实际上确定停止?

时间:2018-07-19 01:52:59

标签: python numpy

我正在阅读numpy.arange文档,并想亲自尝试一些事情。 (numpy版本1.14.5)

这是我的代码:

print(np.arange(start=5))

我不确定我的期望是什么,但绝对不是这样:

[0 1 2 3 4]

我应该如何阅读文档和功能签名,以便了解发生了什么?显然start0,而stop5,但这是如何工作的?请注意,我是Python的初学者,所以这可能是我对方法的可选参数缺乏了解。

2 个答案:

答案 0 :(得分:2)

numpy.arange的签名记录为numpy.arange([start, ]stop, [step, ]dtype=None),表示startstep是可选的,并且如果提供了一个位置参数,则将其视为为stop ...,但在实现中更像

def arange(start, stop=None, step=None, dtype=None):
    ...

我说“更喜欢”是因为它是用C语言编写的,the implementation实际上看起来不是那样,但是它基本上是那样工作的。

如果arange收到一个位置参数,它将作为终止值处理,但仍将其作为start参数接收。为了解决这个问题,对arange进行了编码,以便如果它收到start而没有收到stopstep时,它将把start当作终止值。 。不幸的是,当它收到关键字start时,这种情况仍然适用,从而导致您陷入混乱的境地。

答案 1 :(得分:0)

np.arange同时需要startstop。如果仅提供一个参数,它将被解释为stop,而start将默认为0。这就是这里发生的事情。

可能的用法是:

np.arange(stop) # assumes start=0, step=1
np.arange(start, stop) # assumes step=1
np.arange(start, stop, step)

np.arange(start)毫无意义,因为没有可停止的“有意义的默认”数字...