我以前问过这个问题,但遭到了强烈的反对。不管怎样,从没有人真的再次看到三重否决的问题这个事实来看,我重新发布它是为了表明我对实际答案感兴趣(如果有)。你知道吗
问题陈述:
我现在需要纯python整数的任意精度特性。在我的代码中,有一个带有布尔值的numpy数组。比如:
arr
array([ True, False, False, False, True, True, True, False, True, True, False, False, True, True, True, False, True, False, False, True, False, True, True, True, True, True, False, True, False, True, True, False, True, True, False, True, False, False, True, False, True, True, False, True, False, True, True, False, True, True, True, False, False, False, True, False, False, True, True, True, True, False, True, False])
我把它转换成numpy.int64
,用arr.astype(int)
来做算术运算。你知道吗
但是我用这段代码把它转换成一个溢出的整数(并且产生了我不想看到的负数)。你知道吗
代码正在使用此函数(它是纯python函数,本身不会有任何整数溢出问题):
def bool2int(x):
y = 0
for i,j in enumerate(x):
y += j<<i
return y
如果我直接在np.array
上运行代码(转换为int与否无关紧要):
bool2int(arr)
-2393826705255337647
bool2int(h.astype(int))
-2393826705255337647
我需要一个正整数。所以,我用了一个列表:
bool2int([int(x) for x in arr])
16052917368454213969
显然,由arr
表示的数字超过了固定精度整数(即263-1)能够直接使用ti的能力。你知道吗
有没有其他直接的方法来达到超越清单理解的目的?你知道吗
编辑:
对于python中的整数溢出理论,我引用了这个source。你知道吗
获取本机Python类型元素的一种方法是
.tolist()
。请注意,我们可以直接在布尔数组上执行此操作。您的代码可以很好地与本机Python bools配合使用。你知道吗作为额外的奖励,它实际上更快。你知道吗
使用
astype(int)
似乎效果不错;以下代码:退货:
您得到的溢出异常在这里似乎不太可能,因此我将再次研究它,因为您可能在其他地方有错误。你知道吗
编辑
如果要获取Python类型而不是numpy对象,只需执行以下操作:
相关问题 更多 >
编程相关推荐