首页 > 解决方案 > 为什么命名参数适用于 np.reshape 而不是 x.reshape?

问题描述

我是 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'>

这些方法之间是否存在实际差异,或者仅仅是语法更简洁?

标签: pythonnumpy

解决方案


不是数组reshape不接受关键字参数,只是参数名称不同。如果您查看 numpy.reshape ( https://numpy.org/doc/stable/reference/generated/numpy.reshape.html ) 的文档,您将看到关键字参数 newshape,而如果您查看相同的ndarray ( https://numpy.org/doc/stable/reference/generated/numpy.ndarray.reshape.html ) 你会发现它叫做形状。为什么 Numpy 开发人员选择以不同的方式称呼它,我无法理解。

我认为学习差异的最简单方法(这完全是个人喜好)是使用 Ipython 并输入

x.reshape?

或者

import numpy as np
np.reshape?

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


推荐阅读