python - numpy array prod vs 乘以列表项
问题描述
我想做一个列表的多个项目。我是通过 numpy 和 python loop 完成的,结果不同。
你能告诉我有什么问题吗?
代码
import numpy as np
a= [5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5]
print (np.prod(a))
>> 2039787520
没有numpy的python代码
a= [5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5]
k=1
for i in a:
k*=i
print (k)
>> 23514624000
另一个案例:
代码
a= [4, 7, 6, 5, 4, 5, 6, 8, 2, 8, 4, 8, 9]
import numpy as np
print (np.prod(a))
>> -579076096
没有 numpy
a= [4, 7, 6, 5, 4, 5, 6, 8, 2, 8, 4, 8, 9]
k=1
for i in a:
k*=i
print (k)
>> 3715891200
问题:为什么在第二种情况下结果是负数和不同?
解决方案
Python 整数是任意精度的。NumPy 数据类型不是;NumPy 中的默认整数 dtype 对应于 C long,在您的平台上是 32 位。需要对于 C long 来说太大的数字的计算将溢出。
您可以指定更大的 dtype 来存储更大的数字,但不能存储任意大的数字。
无溢出:
In [2]: numpy.prod([5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5], dtype='int64')
Out[2]: 23514624000
仍然溢出:
In [3]: numpy.prod([10000, 10000, 10000, 10000, 10000, 10000], dtype='int64')
Out[3]: 2003764205206896640
推荐阅读
- python - Keras ConvLSTM 优化结果和内存管理
- vuejs2 - 如何将动态id 绑定到 JavaScript 事件?
- ios - Stripe iOS didCreatePaymentResult 永远不会被调用
- c# - Visual Studio:移植到 .NET Core 3 后缺少“视图设计器”
- python - 尝试在遗传算法中创建随机性时出错
- git - 删除重复提交
- regex - 注释以模式开头和结尾的行
- sql - st_contains 在雅典娜
- android - 单击 EditText 后隐藏键盘
- google-cloud-platform - Google Cloud Run - 它是否支持入站请求或出站请求的非 http 协议?