什麼是最快(或最 「Python化」)的方式來的Python/numpy的:將布爾變量的列表unsigned int類型
x = [False, False, True, True]
轉換爲
12
? (如果有這種方式)如果
x
是bools的代替numpy.array
?有沒有特別的命令?
我有一個大的m乘N陣列的布爾值,其中,每個n元素行代表一個高維特徵向量的單一低維散列。 (在上面的例子中,n = 4)。我想知道答案,以便儘可能壓縮我的數據。謝謝。
編輯:謝謝你的回覆!使用下面的測試代碼,
t = 0
for iter in range(500):
B = scipy.signbit(scipy.randn(1000,20))
for b in B:
t0 = time.clock()
# test code here
t1 = time.clock()
t += (t1-t0)
print t
...這裏是我的Thinkpad筆記本的運行時間:
- My answer:4.26秒
- Sven Marnach 1:7.88
- Emil H:8.51
- Sven Marnach 2:8.72
- delnan:10.14
- liori:53.49
當然,我歡迎可以證實或反駁我的數據的任何獨立測試!
編輯:在我的回答如下,改變int(j)
簡單j
仍然有效,但運行六倍慢!那麼如果bool使用int
來鑄造,其他答案可能會變得更快。但我懶得再次測試一切。
編輯:liori發佈的獨立測試here結果。
將[False,False,True,True]轉換爲12的規則是什麼? – 2010-10-31 23:34:17
'x [0]'是LSB,'x [-1]'是MSB。 – 2010-10-31 23:35:52
請使用'timeit'進行測試,它不太容易出錯。我的時代:http://pastebin.com/x1FEP9gY – liori 2010-11-01 02:16:52