numpy-解释numpy.prod 问题:
请建议我如何理解空列表/数组的乘积为1以及numpy.prod的行为。任何好的阅读,文章到目前为止,我找不到任何(如在底部)numpy-解释numpy.prod 问题:,numpy,cartesian-product,Numpy,Cartesian Product,请建议我如何理解空列表/数组的乘积为1以及numpy.prod的行为。任何好的阅读,文章到目前为止,我找不到任何(如在底部) 空数组的乘积是中性元素1 np.prod([]) 1.0 ``` 为什么空数组的乘积a=np.empty((1,5),dtype=float)是0而不是1?如果空列表/数组的定义乘积为1为真,那么我认为它应该为1 a = np.empty((1,5), dtype=float) a.prod() --- 0 背景 搞不清楚为什么乘积(数组中元素的乘法)是1,而不
np.prod([])
1.0 ```
为什么空数组的乘积a=np.empty((1,5),dtype=float)
是0
而不是1
?如果空列表/数组的定义乘积为1
为真,那么我认为它应该为1
a = np.empty((1,5), dtype=float)
a.prod()
---
0
背景
搞不清楚为什么乘积(数组中元素的乘法)是1
,而不是0
。对文章进行了研究,但找不到明确的解释
np.prod
的代码为:
return _wrapreduction(a, np.multiply, 'prod', axis, dtype, out,
keepdims=keepdims, initial=initial, where=where)
换句话说,它只是:
In [176]: np.multiply.reduce(np.arange(1,6))
Out[176]: 120
如果我们使用acculate
替代,则该操作可能更清晰:
In [177]: np.multiply.accumulate(np.arange(1,6))
Out[177]: array([ 1, 2, 6, 24, 120])
基本上,np.prod
是np.sum
的乘法等价物
如果您查看np.multiply.reduce
的文档,您将得到一般ufunc.reduce
方法的描述。它讨论的是一个初始值,它可能是默认值,也可能是用户指定的。所有的reduce
操作都必须从某种东西开始,最好是从上下文中有意义的东西开始。当参数为空-0值时,该初始值将应用
In [181]: np.multiply.reduce(np.arange(1,6),initial=10)
Out[181]: 1200
In [182]: np.multiply.reduce(np.arange(1,6),initial=0)
Out[182]: 0
请注意,我必须在1时启动arange
。如果参数中有任何0,则prod
将为0
In [184]: np.multiply.reduce([],initial=0)
Out[184]: 0.0
In [185]: np.multiply.reduce([],initial=1)
Out[185]: 1.0
In [186]: np.multiply.reduce([],initial=10)
Out[186]: 10.0
至于你对np.empty
函数的混淆,你有没有费心去看a
In [187]: np.empty((1,5), float)
Out[187]: array([[4.9e-324, 9.9e-324, 1.5e-323, 2.0e-323, 2.5e-323]])
In [188]: np.array([])
Out[188]: array([], dtype=float64)
np.empty
不会产生与np.array([])
相同的结果。请注意形状((1,5)与(0,)以及值的差异。np.prod的代码为:
return _wrapreduction(a, np.multiply, 'prod', axis, dtype, out,
keepdims=keepdims, initial=initial, where=where)
换句话说,它只是:
In [176]: np.multiply.reduce(np.arange(1,6))
Out[176]: 120
如果我们使用acculate
替代,则该操作可能更清晰:
In [177]: np.multiply.accumulate(np.arange(1,6))
Out[177]: array([ 1, 2, 6, 24, 120])
基本上,np.prod
是np.sum
的乘法等价物
如果你看一下np.multiply.reduce
的文档,你会得到一般ufunc.reduce
方法的描述。它讨论的是初始值,它可能是默认值,也可能是用户特定的值。所有reduce
操作都必须从某个地方开始,最好是从上下文中有意义的地方开始。当参数为空-0值时,该初始值将应用
In [181]: np.multiply.reduce(np.arange(1,6),initial=10)
Out[181]: 1200
In [182]: np.multiply.reduce(np.arange(1,6),initial=0)
Out[182]: 0
请注意,我必须在1处启动arange
。如果参数中有任何0,则prod
将为0
In [184]: np.multiply.reduce([],initial=0)
Out[184]: 0.0
In [185]: np.multiply.reduce([],initial=1)
Out[185]: 1.0
In [186]: np.multiply.reduce([],initial=10)
Out[186]: 10.0
至于你对np.empty
函数的混淆,你有没有费心去看a
In [187]: np.empty((1,5), float)
Out[187]: array([[4.9e-324, 9.9e-324, 1.5e-323, 2.0e-323, 2.5e-323]])
In [188]: np.array([])
Out[188]: array([], dtype=float64)
np.empty
不会产生与np.array([])
相同的结果。请注意形状((1,5)与(0,)以及值方面的差异。原因是,np.empty
不是空数组,而是具有未初始化值的数组。您可以使用例如print(np.empty(1,5),dtype=float)进行检查
为什么一个空产品产生1,这个问题在这里问得更好:原因是,np.empty
不是一个空数组,而是一个具有未初始化值的数组,根据。您可以检查例如print(np.empty(1,5),dtype=float)
为什么一个空产品产生1,这个问题在这里问得更好: