2015-06-03 118 views
2

我有一個數組,用於映射生命遊戲中的單元格。到目前爲止,我對每個單元都有一個int。爲了最小化讀取的數量,我想將數組壓縮爲每個整數8個單元。將numpy int數組轉換爲布爾數組

當我想創建一個位圖時,問題就出現了,它需要像前一種情況下的0和1數組。

有沒有快速的方式在numpy轉換呢?我可以爲你做一個循環,但可能有更好的方法。

例子:

[01011100b, 0x0] -> [0, 1, 0, 1, 1, 1, 0 ,0, 0,0,0,0,0,0,0,0] 
+0

我不知道你如何儲存'01011100b'。你能得到字符串表示嗎?如果是這樣,'list()'將字符串轉換爲其字符列表。這有幫助嗎? – leekaiinthesky

+0

這是一個int32,我寫在二進制文件中,清楚地顯示了我的想法。儘管您的解決方案可能與'hsplit'一起工作。不知道是否有更好的方法,而不使用字符串 –

+0

如果你不走字符串路由,你必須手動做每個地方,像這樣(儘管使用0b10000000等,而不是0x ...):http ://stackoverflow.com/questions/2562308/integer-to-byte-conversion – leekaiinthesky

回答

2

numpy.packbitsnumpy.unpackbits是你要尋找一個非常接近的比賽:

>>> numpy.packbits([1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1]) 
array([225, 184], dtype=uint8) 
>>> numpy.unpackbits(array([225, 184], dtype=numpy.uint8)) 
array([1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0], dtype=uint8) 

注意numpy.unpackbits(numpy.packbits(x))不會有相同的長度,如果xlen(x)不是8的倍數;最後將填充零。