gpt4 book ai didi

python - numpy.r_ 不是函数。它是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:34:57 25 4
gpt4 key购买 nike

根据 numpy.r_ 上的 numpy/scipy 文档 here ,它是“不是函数,所以不带参数”。

如果不是函数,那么numpy.r_等“函数”的正确说法是什么?

最佳答案

我会争辩说,r_ is 是一个函数,但它是由一个聪明的 hack 使用不同的语法实现的。 Mike 已经解释了 r_ 实际上不是一个函数,而是 RClass 的一个类实例,它实现了 __getitem__,所以你可以使用它作为 r_[1]。外观上的区别在于您使用方括号而不是弯曲的括号,因此您不是在进行函数调用,而是实际上是在索引对象。虽然这在技术上是正确的,但对于所有目的来说,它就像函数调用一样工作,但它允许一些普通函数不允许的额外语法。

创建 r_ 的动机可能来自于 Matlab 的语法,它允许以非常紧凑的方式构造数组,例如 x = [1:10, 15, 20:10:100 ]。要在 numpy 中实现同样的效果,您必须执行 x = np.hstack((np.arange(1,11), 15, np.arange(20,110,10)))。 python中不允许使用冒号创建范围,但它们确实以切片符号的形式存在以索引到列表中,例如L[3:5],甚至是A[ 2:10, 20:30] 用于多维数组。在幕后,这些索引符号被转换为对 __getitem__ 的调用。对象的方法,其中冒号符号被转换为 slice对象:

In [13]: class C(object):
...: def __getitem__(self, x):
...: print x

In [14]: c = C()

In [15]: c[1:11, 15, 20:110:10]
(slice(1, 11, None), 15, slice(20, 110, 10))

r_ 对象“滥用”这一事实来创建一个接受切片表示法的“函数”,该函数还执行一些额外的操作,例如将所有内容连接在一起并返回结果,以便您可以编写 x = np.r_[1:11, 15, 20:110:10]。文档中的“不是函数,所以不带参数”有点误导......

关于python - numpy.r_ 不是函数。它是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18601001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com