2016-05-12 1 views
0

2千万の32ビットと64ビットの整数を対応するビット配列に変換する方法が必要です(これはメモリ/時間効率が必要です)。 question/answerここからのアドバイスの下で、私はnumpy.unpackbitsを使ってこれをしようとしています。私はなく、途中で、1要素が最後の一つであることが期待される整数をビットの配列に変換するためにnumpyを使用する

array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=uint8) 

np.unpackbits(np.array([1], dtype=np.uint64).view(np.uint8)) 

を生成します。この方法を試している間、私は、予期しない結果に走りました。だから私は明らかにバイトオーダーを保つ何かが欠けている。私は何が欠けていますか?

+0

私はドキュメントがこれを証明する表示されませんでしたが、私はタイプint64型の配列を作成するときに、私が想定し、データのサイズを小さくすると、すべての要素が長時間キャストされます。私。これはCでのキャストと等価で、高位ビットを '0 'で埋め込むべきです。 –

+0

2,000万人!しかし、私は手を編集しないことを願っていますO_o – linusg

+2

[この回答](http://stackoverflow.com/a/18296281/8747)あなたが[このリンク](http://docs.scipy.org/doc/numpy/user /basics.byteswapping.html)。 –

答えて

6

試してください。dtype='>i8'、そのよう:

In [6]: np.unpackbits(np.array([1], dtype='>i8').view(np.uint8)) 
Out[6]: 
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], dtype=uint8) 

参考:

http://docs.scipy.org/doc/numpy/user/basics.byteswapping.html

+0

D'oh !.さて、私は最初の2つの段落を読んだことがあります。 –

+0

同じメモリアーキテクチャの下でデータが生成されて消費されるため、私が私のケースでこれをやらなければならない理由はまだ分かりませんが。 –

+2

あなたのPCはリトルエンディアンであり、ビッグエンディアンの表現を依頼しています。 –

関連する問題