首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中使用大型索引(numpy或list)

在python中使用大型索引(numpy或list)
EN

Stack Overflow用户
提问于 2017-10-31 13:53:52
回答 6查看 436关注 0票数 1

我经常需要输入大整数来索引和创建numpy数组,例如3500000或250000。通常,我会使用科学符号3.5e6或.25e6之类的方式输入这些内容。这样做更快,也更不可能出现错误。

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

是否有一种让numpy或python将大浮点数解释为整数的方法,还是在python中创建大整数的简单方法?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-10-31 14:28:26

在一条评论中,您考虑让e5 = 10**5像在35*e5中一样使用,遗憾的是它不支持3.5*e6。这里有一个黑客可以做到:

代码语言:javascript
复制
class E:
    def __init__(self, e):
        self.val = 10**e
    def __rmul__(self, x):
        return int(x * self.val)

演示:

代码语言:javascript
复制
>>> e6 = E(6)
>>> 3.5*e6
3500000

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

代码语言:javascript
复制
>>> 0.1251*e6
125099

下面是一个更好的方法,构建文字'0.1251e6'并对其进行评估:

代码语言:javascript
复制
class E:
    def __init__(self, e):
        self.e = e
    def __rmul__(self, x):
        return int(float('%se%d' % (x, self.e)))

演示:

代码语言:javascript
复制
>>> e6 = E(6)
>>> 0.1251*e6
125100
票数 2
EN

Stack Overflow用户

发布于 2017-10-31 14:05:15

如果您担心零位数的错误,请尝试下划线。

代码语言:javascript
复制
>>> 3_500_000
3500000
票数 2
EN

Stack Overflow用户

发布于 2017-10-31 14:34:13

我的廉价解决方案是在适当的范围内创建一个助手函数。

代码语言:javascript
复制
def e(coeff, exponent):
    return int (coeff * 10 ** exponent)
np_array[e(3.5,6)] # use like this

但是这个更便宜的答案可能会导致舍入错误,在适当的范围内为int创建别名是简单而干净的解决方案。

代码语言:javascript
复制
e=int # in proper scope
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47037150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档