开发者社区> 问答> 正文

numpy元素乘法中的不直观行为

我正在使用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)

array([[2100000000,32000000]])
但是,当我这样做的时候

a = np.array([[30000,40000]])
b = np.array([[70000,80000]])
np.multiply(a,b)
我明白了

array([[ 2100000000, -1094967296]])
我猜想结果应该是数组([[30000 70000,40000 80000]])。负数来自哪里?我该怎么做才能得到预期的阵列?

展开
收起
一码平川MACHEL 2019-01-21 11:23:45 1703 0
1 条回答
写回答
取消 提交回答
  • 看起来numpy默认将普通数字解释为np.int32(范围从-2 31 ... 2 31 - 1),这将溢出4000080000,因为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(a0)
    Out: numpy.int32
    您可以通过明确设置更合适的数据类型来解决此问题:

    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)
    要么

    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)

    2019-07-17 23:26:04
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载