Ire*_*nau 2 python numpy elementwise-operations
我正在使用 Python 3.7 和 numpy 1.15.2,并且在元素乘法中遇到了我不理解的行为。以下对我来说很直观:
import numpy as np
a = np.array([[30000,4000]])
b = np.array([[70000,8000]])
np.multiply(a,b)
Run Code Online (Sandbox Code Playgroud)
给
array([[2100000000,32000000]])
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时
a = np.array([[30000,40000]])
b = np.array([[70000,80000]])
np.multiply(a,b)
Run Code Online (Sandbox Code Playgroud)
我得到
array([[ 2100000000, -1094967296]])
Run Code Online (Sandbox Code Playgroud)
我猜结果应该是数组([[ 30000*70000, 40000*80000]])。负数从何而来?我该怎么做才能得到预期的数组?
看起来 numpy 默认将普通数字解释为np.int32(范围从 -2 31 ... 2 31 - 1),它将溢出40000*80000,因为3200000000 > 2**31 - 1 (= 2147483647):
import numpy as np
a = np.array([[30000,40000]])
b = np.array([[70000,80000]])
np.multiply(a,b)
Out: array([[ 2100000000, -1094967296]])
type(a[0][0])
Out: numpy.int32
Run Code Online (Sandbox Code Playgroud)
您可以通过显式设置更适合的数据类型来解决此问题:
a = np.array([[30000,40000]], dtype=np.int64)
b = np.array([[70000,80000]], dtype=np.int64)
np.multiply(a,b)
Out: array([[2100000000, 3200000000]], dtype=int64)
Run Code Online (Sandbox Code Playgroud)
或者
a = np.array([[30000,40000]], dtype=np.uint32)
b = np.array([[70000,80000]], dtype=np.uint32)
np.multiply(a,b)
Out: array([[2100000000, 3200000000]], dtype=uint32)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |