我经常需要输入大整数来索引和创建 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
