numpy.product 对比 numpy.prod 对比 ndarray.prod
numpy.product vs numpy.prod vs ndarray.prod
我正在通读 Numpy 文档,函数 np.prod(...)
、np.product(...)
和 ndarray
方法 a.prod(...)
似乎都是等效的。
在 style/readability 和性能方面是否有首选版本可供使用?是否存在不同版本更可取的不同情况?如果不是,为什么有三种不同但非常相似的方法来执行相同的操作?
这是我从 NumPy 1.14.0 的源代码中收集到的内容。与当前Master分支(NumPy 1.15.0)相关的答案,参见miradulo的答案。
对于 ndarray
,prod()
和 product()
是等价的。
对于 ndarray
、prod()
和 product()
都会调用 um.multiply.reduce()
.
如果对象类型不是ndarray
但它仍然有prod
方法,那么prod()
将returnprod(axis=axis, dtype=dtype, out=out, **kwargs)
而 product
将尝试使用 um.multiply.reduce
.
如果对象不是 ndarray
并且它没有 prod
方法,那么它将表现为 product()
。
ndarray.prod()
相当于prod()
.
我不确定你关于偏好和可读性的问题的后半部分。
从今天的 master 分支 (1.15.0) 开始,np.product
仅使用 np.prod
,最终可能会被弃用。参见 MAINT: Remove duplicate implementation for aliased functions. #10653。
而np.prod
和ndarray.prod
最终都会调用umath.multiply.reduce
,所以除了自由函数可以接受array-[=31之外,它们之间真的没有区别=]like 类型(如 Python 列表)以及 NumPy 数组。
在此之前,就像在 NumPy 1.14.2 中一样,文档声称 np.product
和 np.prod
是相同的,但是由于 Parag 提到的重复实现而存在错误。即来自 #10651 的 Eric Weiser 示例:
>>> class CanProd(object):
def prod(self, axis, dtype, out): return "prod"
>>> np.product(CanProd())
<__main__.CanProd object at 0x0000023BAF7B29E8>
>>> np.prod(CanProd())
'prod'
所以简而言之,现在它们是一样的,并且 np.prod
比 np.product
更受青睐,因为后者是一个可能被弃用的别名。
我正在通读 Numpy 文档,函数 np.prod(...)
、np.product(...)
和 ndarray
方法 a.prod(...)
似乎都是等效的。
在 style/readability 和性能方面是否有首选版本可供使用?是否存在不同版本更可取的不同情况?如果不是,为什么有三种不同但非常相似的方法来执行相同的操作?
这是我从 NumPy 1.14.0 的源代码中收集到的内容。与当前Master分支(NumPy 1.15.0)相关的答案,参见miradulo的答案。
对于
ndarray
,prod()
和product()
是等价的。对于
ndarray
、prod()
和product()
都会调用um.multiply.reduce()
.如果对象类型不是
ndarray
但它仍然有prod
方法,那么prod()
将returnprod(axis=axis, dtype=dtype, out=out, **kwargs)
而product
将尝试使用um.multiply.reduce
.如果对象不是
ndarray
并且它没有prod
方法,那么它将表现为product()
。ndarray.prod()
相当于prod()
.
我不确定你关于偏好和可读性的问题的后半部分。
从今天的 master 分支 (1.15.0) 开始,np.product
仅使用 np.prod
,最终可能会被弃用。参见 MAINT: Remove duplicate implementation for aliased functions. #10653。
而np.prod
和ndarray.prod
最终都会调用umath.multiply.reduce
,所以除了自由函数可以接受array-[=31之外,它们之间真的没有区别=]like 类型(如 Python 列表)以及 NumPy 数组。
在此之前,就像在 NumPy 1.14.2 中一样,文档声称 np.product
和 np.prod
是相同的,但是由于 Parag 提到的重复实现而存在错误。即来自 #10651 的 Eric Weiser 示例:
>>> class CanProd(object): def prod(self, axis, dtype, out): return "prod" >>> np.product(CanProd()) <__main__.CanProd object at 0x0000023BAF7B29E8> >>> np.prod(CanProd()) 'prod'
所以简而言之,现在它们是一样的,并且 np.prod
比 np.product
更受青睐,因为后者是一个可能被弃用的别名。