Skip to main content
 首页 » 编程设计

python之在 python 中使用大索引(numpy 或列表)

2025年05月04日13davidwang456

我经常需要输入大整数来索引和创建 numpy 数组,例如 3500000 或 250000。通常我会使用科学记数法输入这些整数,例如 3.5e6 或 .25e6 等。这样速度更快,出错的可能性也小得多。

不幸的是,python 需要整数数据类型进行索引。显而易见的解决方案是转换数据类型。所以 [5e5:1e6] 变成了 [int(5e5):int(1e6)],但是这降低了可读性并且打字的时间更长。更不用说,在 list 或 numpy.ndarray 上的索引操作失败之前,很容易忘记索引是什么数据类型。

有没有办法让 numpy 或 python 将大 float 解释为整数,或者有没有一种在 python 中创建大整数的简单方法?

请您参考如下方法:

在评论中,您考虑将 e5 = 10**5 用作 35*e5,遗憾的是它不支持 3.5*e6。这是一个黑客:

class E: 
    def __init__(self, e): 
        self.val = 10**e 
    def __rmul__(self, x): 
        return int(x * self.val) 

演示:

>>> e6 = E(6) 
>>> 3.5*e6 
3500000 

虽然由于 float 是有损的,这可能会导致轻微的不准确,例如:

>>> 0.1251*e6 
125099 

这是一个更好的 hack,构建文字 '0.1251e6' 并对其进行评估:

class E: 
    def __init__(self, e): 
        self.e = e 
    def __rmul__(self, x): 
        return int(float('%se%d' % (x, self.e))) 

演示:

>>> e6 = E(6) 
>>> 0.1251*e6 
125100