python数组溢出_如何将数组中的每个元素与大数相乘而不会出现OverflowError:Python int太大而无法转换为C long?...

带有浅拷贝的以下命令(s[:])将为您创建s视图,其元素的类型为int,因此在分配后,它会尝试将[i*weight for i in s]创建的元素分配给int容器,但由于结果为C long,因此会引发以下错误:

OverflowError: Python int too large to convert to C long如果您只使用[i*weight for i in s],您也会看到结果:

>>> [i*weight for i in s]

[-1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60]相反,你可以直接多个:

>>> s = s*weight

>>> s

array([ 2.70765983e+42, 3.04611731e+42, 3.21534605e+42,

2.53843109e+42, 4.56917596e+42, 4.39994722e+42,

2.19997361e+42, 5.75377713e+42, 6.43069209e+42,

6.09223461e+42, 7.27683579e+42, 7.10760705e+42,

8.12297948e+42, 8.46143696e+42, 9.30758066e+42,

9.64603814e+42, 1.18460117e+43, 1.13383255e+43,

1.09998681e+43, 1.43844428e+43, 1.67536452e+43,

1.59075015e+43, 1.52305865e+43, 1.89536188e+43,

2.13228211e+43, 2.19997361e+43, 2.40304810e+43,

2.03074487e+43])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误通常是因为 Python 整数太大,超出了 C 语言的 long 类型的范围。出现这个错误的原因可能是你在进行大数运算时,例如计算超出了 64 位整数的范围。 如果你遇到这个问题,有以下几种解决方法: 1. 使用 Python 的 Decimal 类型。Decimal 类型允许你使用任意精度的数字,可以处理非常大的整数。例如: ```python from decimal import Decimal x = Decimal('10000000000000000000000000000000000000000000000000000000000000000000000000000000000000') y = Decimal('10000000000000000000000000000000000000000000000000000000000000000000000000000000000001') z = x + y print(z) ``` 这将输出结果 `20000000000000000000000000000000000000000000000000000000000000000000000000000000000001`,不会遇到 `OverflowError` 错误。 2. 使用 Python 的第三方库 numpy。numpy 提供了一种称为 bigint 的特殊数据类型,可以处理比 Python 整数更大的整数。例如: ```python import numpy as np x = np.array([10000000000000000000000000000000000000000000000000000000000000000000000000000000000000], dtype=np.int64) y = np.array([10000000000000000000000000000000000000000000000000000000000000000000000000000000000001], dtype=np.int64) z = x + y print(z) ``` 这将输出结果 `[20000000000000000000000000000000000000000000000000000000000000000000000000000000000001]`,不会遇到 `OverflowError` 错误。 3. 如果你不需要处理超过 64 位的整数,可以使用 Python 的长整型类型 longlong 类型可以处理任意大小的整数,但是速度可能会比较慢。例如: ```python x = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000 y = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000001 z = long(x) + long(y) print(z) ``` 这将输出结果 `20000000000000000000000000000000000000000000000000000000000000000000000000000000000001`,不会遇到 `OverflowError` 错误。 希望这些解决方法能帮助你解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值