python - numpy 例程和 ndarray 方法之间的区别?

标签 python numpy

<分区>

使用 numpy 时,通常可以选择从 numpy API 调用函数,还是从 ndarray 调用函数,例如:

>>> import numpy as np
>>> array_ = np.array([True, False, True])
>>> np.any(array_)
True
>>> array_.any()
True

在功能上,这些对我来说似乎是相同的; 他们是吗? 它们在编程上是否不同? (例如性能/内存方面)

我试图在关于 ndarraysnumpy 引用手册中找到答案和 routines ,但据我所知,没有给出任何解释。

最佳答案

首先要注意术语,这样这个例子的其余部分就很清楚了-- 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(例如 one currently on GitHub)可能会使用“wrapper factory function”来做几乎相同的事情。另见 thisnp.transpose() 类似示例的问答.一般来说,它归结为 np.<function>(arr)变成某种形式的 getattr(arr, <function>) ,至少对于 fromnumeric.py 中的内容.


就比较而言——您谈论的是使用顶级函数时增加的额外开销,但这带来了一些额外的灵 active :例如,调用了 np.asanyarray(a) ,这意味着您可以将 Python 列表作为 a 传递到功能。在我的电脑上,调用 np.asanyarray(arr)花费 arr.any() 时间的 1/8 ,所以在答案中加入一点意见,在两者之间进行选择可能不是性能优化方面的首要考虑。

关于python - numpy 例程和 ndarray 方法之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51306501/

相关文章:

python - 声明 basinhopping 优化的约束

c++ - gdbinit、 pretty-print 和相关目录?

python - 需要为每个字符串创建一个数组的数组

python - 如何在 Python 中使用 Matplotlib 绘制阶跃函数?

python - TensorFlow 估计器.预测 : Saving when as_iterable=True

python - 使用带约束的 linalg 求解系统

python - 谷歌云功能 - ImportError : cannot import name 'pubsub' from 'google.cloud' (unknown location)

python - 将样本编号附加到 altair 中的 X-Labels

python - 在python opencv中通过网络发送实时视频帧

python - 压缩格式 block 对角矩阵的高效线性代数