Numpy数组乘法会导致一些值为inf,即使原始数组都是有效的浮点数

yqkkidmi  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(206)

我试图执行一个元素明智的乘法众多numpy数组。
实施:-

mult = np.ones(len(single_arrays[0]))
for i in range(len(single_arrays)):
    mult *= single_arrays[i]

每个单个数组中的大多数值在0和1之间(一些值大于1),并且2D“single_arrays”具有大约700个单独的数组。
结果数组“mult”有很多“inf”值和一个“nan”值,即使“single_arrays”中没有数组有“inf”或“nan”值,所有值都是有效的浮点数。
为什么这个问题会出现在Mult中?数组中的一些值非常小,只有小数点后的十位和千位,下溢或上溢会是问题吗?

6za6bjd0

6za6bjd01#

如果你说的都是对的,那就不可能发生。所以你相信的东西不是真的:-)
*只能在被乘数是inf或乘积非常大时传递无穷大。但如果“每个数组中的所有值都在0和1之间”为真,则它不会很大。则没有乘积可以大于1.0。
*只能在被乘数是NaN的情况下传递NaN,或者您尝试将inf和0相乘(以任何顺序)。你说你也从来没做过。
下溢当然是可能的,但这是不相关的-微小的数字不能产生inf,除非你除以零,或者一个非常小的数字(接近0,在非正规范围内)。
所以再加上指纹就能知道到底发生了什么。选择一个索引jmult[j]以inf结束,然后更改代码以显示它的来源:

for i in range(len(single_arrays)):
    orig = mult[j]
    mult *= single_arrays[i]
    if mult[j] == inf:
        print("got an inf in mult[j]",
              "as the product of",
              orig, "and", single_arrays[i][j])
        assert False  # just a way to raise an exception

试试看然后告诉我们会发生什么。

相关问题