代码之家  ›  专栏  ›  技术社区  ›  Koray Tugay

为什么numpy.arange函数的start参数实际上决定了stop?

  •  0
  • Koray Tugay  · 技术社区  · 6 年前

    我在读 numpy.arange 并想亲自尝试一些东西。(numpy版本1.14.5)

    这是我的代码:

    print(np.arange(start=5))
    

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

    [0 1 2 3 4]
    

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

    2 回复  |  直到 6 年前
        1
  •  2
  •   user2357112    6 年前

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

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

    我说“更像”,因为它是用C和 the implementation 实际上看起来不是这样,但主要是这样。

    如果 arange 接收一个位置参数,它将把它作为一个停止值处理,但它仍然将它作为 开始 参数。为了解决这个问题, 阿朗格 如果它接收到 开始 而且没有 停止 ,它将处理 开始 作为停止值。不幸的是,当它收到 开始 通过关键字,导致混乱的局面。

        2
  •  0
  •   Julien    6 年前

    np.arange 两者都需要 start 和A stop . 如果只提供一个参数,它将被解释为 停止 开始 将默认为 0 . 这就是这里发生的事情。

    可能的用法是:

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

    np.arange(start) 没有意义,因为没有“有意义的默认”号码可以停止…