お世話になります。
【 使用言語 】
Python3
【 したいこと 】
今、Byte(8bit)長の配列(リスト)変数 a[32個] の
32Byte全体分 を 256bit列 と考えた場合、
このビット列全体を Right Shift させたいのですが、
どうようにすればできるのでしょうか?
Python または numpy または scipy で
一発変換できる関数が存在するのでしょうか?
宜しくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
bitarrayを使いましょう
$ pip install bitarray
サンプルコード
Python
1from bitarray import bitarray 2 3# 適当なテストデータを作成する 4data = [0] * 32 #32byteの数値リストを作成 5data[0] = 128 6print(data) 7# => [128, 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] 8 9# bitarrayに変換する(bytes()を経由する) 10bits = bitarray() 11bits.frombytes(bytes(data)) 12print(bits) 13# => bitarray('1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000') 14 15# 右シフトはこんな感じで記述できる (>> 88) 16bits = bitarray('0') * 88 + bits[:-88] 17print(bits) 18# => bitarray('0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000') 19 20# 左シフトだとこんな感じ (<< 80) 21bits = bits[80:] + bitarray('0') * 80 22print(bits) 23# => bitarray('0000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000') 24 25# 数値リストに戻す(bytes経由) 26data = list(bits.tobytes()) 27print(data) 28# => [0, 128, 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]
lambda にしておくと楽かも
right_shift = lambda bits, num: bitarray('0') * num + bits[:-num] left_shift = lambda bits, num: bits[num:] + bitarray('0') * num
投稿2017/04/20 09:56
総合スコア15898
0
https://pypi.python.org/pypi/bitarray/
bitarrayモジュールを使うのがいいと思います。
シフト操作ももちろんできて、リストと同じようなスライス操作や足し算操作で記述できます。
投稿2017/04/20 07:54
総合スコア5570
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
どうもありがとうございます。
一度、調べてみます。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/24 10:47