python - 为什么命名参数适用于 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'>
这些方法之间是否存在实际差异,或者仅仅是语法更简洁?
解决方案
不是数组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?
这将基本上显示我链接到的相同文档,但允许您在测试代码时查看它。
推荐阅读
- javascript - 使用 superagent 和 Lumen API 被 CORS 策略阻止的请求
- python - 3.5 小时后仍然无法安装 Django - 我的毅力正在减弱
- google-apps-script - 将模板中的新工作表添加到原始 google 脚本中并组织到文件夹中
- heroku - 我可以通过 CLI 或其他非 Web UI 方法创建 Heroku 调度程序作业吗?
- node.js - React 如何从 Get 语句中获取信息
- gremlin - How do i set null value to a property of a node in janusgraph?
- django - 不删除的对象
- c# - C# - 如何正确等待另一个类异步提供数据?
- sql - 不使用组时解释 COUNT 返回值
- html - 如何在 .po 翻译文件中使用 HTML 标记
(@lingui/反应)