OverflowerError:Python int太大,无法在将数据馈送到numpy数组时转换为C long

2024-05-19 11:30:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将加密后的大量数字输入到numpy数组中,但它说该数字太长,因此溢出。我检查了代码,在我将数字输入numpy数组之前,一切都是正确的,但是在输入数据的步骤中,它得到了一个错误,即en1[i,j] = pk.raw_encrypt(int(test1[i,j]))

我在这里得到的加密号码是3721469428823308171852407981126958588051758293498563443424608937516905060542577505841168884360804470051297912859925781484960893520445514263696476240974988078627213135445788309778740044751099235295077596597798031854813054409733391824335666742083102231195956761512905043582400348924162387787806382637700241133312260811836700206345239790866810211695141313302624830782897304864254886141901824509845380817669866861095878436032979919703752065248359420455460486031882792946889235009894799954640035281227429200579186478109721444874188901886905515155160376705016979283166216642522595345955323818983998023048631350302980936674。Python3仍然声称它是int类型。数字本身没有溢出,但numpy数组不允许填充它

numpy的什么属性导致了这一问题,有什么解决办法吗?我曾经考虑过使用list来替代numpy数组,但如果它不是一维数组,那么实现起来就相当困难。我在下面附上了完整的测试代码

test1 = np.array([[1,2,3],[1,2,4]])
test2 = np.array([[4,1,3],[6,1,5]])

en1 = np.copy(test1)
en2 = np.copy(test2)

pk, sk = paillier.generate_paillier_keypair()

en_sum = np.copy(en1)
pl_sum = np.copy(en1)

for i in range(test1.shape[0]):
    for j in range(test2.shape[1]):
        en1[i,j] = pk.raw_encrypt(int(test1[i,j]))
        en2[i,j] = pk.raw_encrypt(int(test2[i,j]))

        en_sum[i,j] = en1[i,j]*en2[i,j]
        pl_sum[i,j] = sk.raw_decrypt(en_sum[i,j])

sum = sk.raw_decrypt(en_sum)

Tags: numpyrawnp数字数组enintencrypt
1条回答
网友
1楼 · 发布于 2024-05-19 11:30:49

Python整数以任意精度存储,而numpy整数则根据您的平台以标准32位或64位表示形式存储

这意味着,虽然最大可表示Python整数仅由系统内存限定,但最大可表示Numpy整数由64位可表示的整数限定

您可以在此处看到最大可表示无符号整数值:

>>> import numpy as np
>>> np.iinfo(np.uint64).max
18446744073709551615

>>> 2 ** 64 - 1
18446744073709551615

应用程序的最佳方法取决于您希望如何处理这些非常大的整数,但我倾向于避免使用Numpy数组处理这种大小的整数

相关问题 更多 >

    热门问题