2015-10-13 69 views
4

我想在尺寸爲128x2的NumPy中創建一個二維維數組,並在其中存儲長整數(每個整數具有128位大小)。在Python中使用NumPy的打印格式

CODE:

keys = np.zeros(shape=(128, 2)) 
for i in range(0, 128): 

    key1 = random.randrange(1 << 127, 1 << 128) 
    key2 = random.randrange(1 << 127, 1 << 128) 

    keys[i, 0] = key1 
    keys[i, 1] = key2 

print(keys) 

隨機密鑰具有以下的輸出:

212325597117085680729458082297541802625 

但是當我打印我的鑰匙陣列我得到了以下的輸出:

OUTPUT:

[[ 3.24916136e+38 1.88464325e+38] 
[ 3.01375156e+38 2.73451722e+38] 
[ 1.85204001e+38 2.47016718e+38] 
[ 1.85813038e+38 2.66817805e+38] 
[ 1.93774249e+38 2.62902937e+38] 
[ 2.77003163e+38 2.13490918e+38] 
[ 1.92502885e+38 3.28965325e+38] 
[ 3.03869869e+38 2.27308256e+38] 
[ 2.97958126e+38 2.50477741e+38] 
[ 1.82747542e+38 2.17062238e+38] 
[ 2.59264124e+38 3.17242510e+38] 
[ 2.43152125e+38 3.33742346e+38] 
etc 

如何以原始格式打印密鑰?

+2

'numpy'沒有128位整數類型(至少在我用過的任何平臺上都沒有)。你想如何將它們存儲在你的數組中?作爲Python對象?作爲字符串?你目前的代碼是使用雙精度浮點數(64位在符號,尾數和指數之間劃分),這將失去不少最不重要的位。 – Blckknght

+0

你看過numpy.set_printoptions()嗎? –

回答

0

您的代碼有兩個問題。

首先是你使用不合適的dtype爲你的長整型數組。 np.zeros返回的數組的默認dtypefloat64,這意味着將整數保存到該數組時將會失去很多精度。之後你如何去格式化輸出並不重要,數據根本就不存在。

不幸的是,numpy沒有內置的128位整數類型。你必須自己決定如何存儲它。一個複合dtype與兩個uint64可能會起作用(儘管每當你對它們進行數學運算時,你都必須在數字之間進行自己的操作)。或者,如果您不需要對數組中的長整數進行任何數學運算,則可以使用字符串dtype。第三個選項是使用object作爲dtype,並讓它使用Python正常的int(支持無限精度的數學運算,但性能比硬件支持的numpy類型差得多)。

第二個問題是格式化打印整數(你實際上在問什麼)。您可以撥打np.set_printoptions爲陣列指定一種格式化方法,但這僅對使用numpy本機支持的dtype有幫助。如果您使用的是其他類型,則可能需要在陣列內容上編寫一個循環,並在您走後適當地打印項目。