【发布时间】:2021-06-19 03:04:54
【问题描述】:
问题
请建议我如何理解为什么空列表/数组的乘积为 1 以及 numpy.prod 的行为的方法。任何好的阅读,到目前为止我找不到任何文章(如底部)。
空数组的乘积是中性元素1
np.prod([]) 1.0 ```
为什么空数组a = np.empty((1,5), dtype=float) 的乘积是0 而不是1?如果product of empty list/array is 1的定义为真,那我想应该是1。
a = np.empty((1,5), dtype=float)
a.prod()
---
0
背景
对乘积(数组中元素的乘积)是 1,而不是 0 感到困惑。研究了文章,但找不到明确的解释。
math.prod([2, 3, 5]) # = 30
math.prod([2, 3]) # = 6
math.prod([2]) # = 2
math.prod([]) # = 1
(* 2 2 2) ; evaluates to 8
(* 2 2) ; evaluates to 4
(* 2) ; evaluates to 2
(*) ; evaluates to 1
似乎与范畴论有关,但解释含糊不清,无法理解它试图解释的内容。
您可以在此处找到分类产品的完整定义。以下 我给出的定义省略了当我们查看时会消失的细节 空产品。
一组对象的乘积是一个对象 P 使得给定任意 其他对象 X ...存在从 X 到 P 的唯一态射,使得 ….
如果你以前从未见过这个,你可能会想知道里面有什么 这与产品有关的世界。你必须相信我 这个。
当对象集为空时,定义的缺失部分 以上无关紧要,所以我们只剩下要求有一个 从每个对象 X 到乘积 P 的唯一态射。在其他 换句话说,P 是一个终端对象,通常表示为 1。所以在范畴论中, 你可以说空产品是 1。
【问题讨论】:
-
原因是,
np.empty不是一个空数组,而是一个根据numpy.org/doc/stable/reference/generated/numpy.empty.html 有未初始化值的数组。您可以检查例如print(np.empty(1,5), dtype=float) -
为什么一个空的产品会产生 1,这是一个更好的问题:math.stackexchange.com