python - numpy 例程和 ndarray 方法之间的区别?
问题描述
使用 时numpy
,通常可以在从numpy
API 调用函数和从 调用函数之间进行选择ndarray
,例如:
>>> import numpy as np
>>> array_ = np.array([True, False, True])
>>> np.any(array_)
True
>>> array_.any()
True
从功能上讲,这些似乎与我相同;他们是吗?它们在编程上是否不同?(例如性能/内存方面)
解决方案
首先要注意术语,所以这个例子的其余部分很清楚——np.any(arr)
是一个函数;arr.any()
在技术上是一个实例方法。
通常,顶级np.<function>(arr)
函数是arr
.
这是np.any()
NumPy 版本 1.14.5 的来源,来自numpy.core.fromnumeric
:
def any(a, axis=None, out=None, keepdims=np._NoValue):
arr = asanyarray(a)
kwargs = {}
if keepdims is not np._NoValue:
kwargs['keepdims'] = keepdims
return arr.any(axis=axis, out=out, **kwargs)
NumPy 的其他版本(例如目前在 GitHub 上的那个)可能会使用“包装器工厂函数”,它实际上做同样的事情。另请参阅此Q/A 以获取类似的示例np.transpose()
。一般来说,它归结为np.<function>(arr)
某种形式getattr(arr, <function>)
,至少对于fromnumeric.py
.
就比较而言——你说的是使用顶级函数时会增加额外的开销,但这会带来一些额外的灵活性:例如,有一个对 的调用np.asanyarray(a)
,这意味着你可以传递一个 Python 列表至于a
功能。在我的电脑上,调用np.asanyarray(arr)
需要 1/8 的时间arr.any()
,所以在答案中注入一点意见,在两者之间进行选择可能不是首先考虑性能优化的地方。
推荐阅读
- react-native - 如何使用样式在本机反应中创建甘特图
- visual-studio - 在 VS Toolbox 中以不同的 DisplayName 显示组件
- apache-flink - StreamTableEnvironment 是否能够针对批处理流运行?
- visual-studio-code - 检查项目文件夹中所有资产的大小写敏感及其在程序中的声明
- flutter - 无法修复在颤振中不正确使用 ParentDataWidget
- r - 将标签放在 circlize 和弦图中的图例颜色条内
- public-key - 将公钥文件转换为base58地址
- api - 如何在 ontap 9.5 或更低版本中使用 API
- flutter - 如何在函数中使用从地图获得的值
- javascript - 'vue' 不是内部或外部命令、可运行程序或批处理文件