为什么命名参数适用于np.重塑而不是x.重塑?



我是python新手,但对R很有经验,所以我对函数、方法和模块的工作方式有点困惑。

在下面的例子中,为什么x.reshape似乎不允许命名参数,而np.reshape中的命名参数工作得很好?

import numpy as np
x = np.random.rand(3,3,2)
x.reshape( (np.prod(x.shape),1)) #works fine
x.reshape(newshape = (np.prod(x.shape),1))  #TypeError: 'newshape' is an invalid keyword argument for this function
np.reshape(a = x, newshape = (np.prod(x.shape),1) ) #works fine

更一般地说,我在哪里可以读到更多关于从对象x的模块调用函数与调用该对象的属性相同的方法之间的区别?

print(type(x.reshape)) # <class 'builtin_function_or_method'>
print(type(np.reshape)) # <class 'function'>

这些方法之间有实际的区别吗,或者仅仅是语法更简洁吗?

不是数组重塑不接受关键字参数,只是参数的名称不同。如果你看一下numpy的文档。在重塑(https://numpy.org/doc/stable/reference/generated/numpy.reshape.html)中,您将看到关键字参数newshape,而如果在narray (https://numpy.org/doc/stable/reference/generated/numpy.ndarray.reshape.html)中查看相同的参数,您将发现它被称为shape。我不明白为什么Numpy的开发人员选择用不同的方式来称呼它。

我认为了解差异的最简单方法(这完全是个人偏好)是使用Ipython并键入

x.reshape?

import numpy as np
np.reshape?

这将基本上显示与我链接到的相同的文档,但允许您在测试代码时查看它。

最新更新