gpt4 book ai didi

Python 的 sum 返回的结果与 NumPy 的 numpy.sum 不同

转载 作者:行者123 更新时间:2023-12-03 16:49:54 41 5
gpt4 key购买 nike

Numpy 的 sum 函数返回了正确的预期结果,但默认的 python 的 sum 不是(至少对于 uint8 数据类型不是,这使得它更加困惑):

In [1]: import numpy as np                                                      

In [2]: x = np.random.randint(2, size = (1000,100))

In [3]: x
Out[3]:
array([[1, 1, 0, ..., 0, 1, 1],
[1, 1, 1, ..., 0, 0, 0],
[1, 1, 0, ..., 1, 0, 1],
...,
[1, 0, 0, ..., 1, 0, 1],
[0, 0, 1, ..., 0, 1, 1],
[1, 1, 0, ..., 1, 1, 1]])

In [4]: np.sum(x)
Out[4]: 50318

In [5]: sum(sum(x))
Out[5]: 50318

In [6]: x = x.astype('uint8')

In [7]: np.sum(x)
Out[7]: 50318

In [8]: sum(sum(x))
Out[8]: 16014

最佳答案

通过指定 uint8您告诉 numpy 每个元素使用 8 位。可以存储在 8 位中的最大数字是 255。所以当你求和时,你会溢出。
实际例子:

>>> arr = np.array([[255],[1]],dtype=np.uint8)
>>> arr
array([[255],
[1]], dtype=uint8)
>>> sum(arr)
array([0], dtype=uint8)
>> arr[0]+arr[1]
array([0], dtype=uint8)

请注意 sum(arr)对应于 arr[0] + arr[1]在这种情况下。如文档中所述:

Arithmetic is modular when using integer types, and no error is raised on overflow.

关于Python 的 sum 返回的结果与 NumPy 的 numpy.sum 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60271193/

41 5 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com