PythonのNビットベクトルを表現して作業するにはどうすればよいですか?
-
23-09-2019 - |
質問
現在私が取り組んでいる課題では、ビットベクトルを使用する必要がありますが、Pythonでこれを行う方法が非常にわかりません。彼らは4ビットから20ビットから20ビットになることができるはずです。私は以前にBIT Vectorを使用したことはありませんが、通常の操作および/XOR操作を使用して操作した署名されていないバイトの配列を作成すると思います。
重要な制限 これは次のとおりです。私は頼ることができません どれか 標準のPythonが提供されたライブラリ以外のライブラリ。
8ビットの符号付きバイトの配列を使用してCでこれを行う方法を知っていると思います。たとえば、ゼロドアレイの18ビットを1つに変えるために、my_bit_array [3]&= 1 << 2のようなことをします
しかし、Pythonは動的にタイプされており、組み込みの配列タイプがないため、Pythonicの方法でこれを行うにはどうすればよいですか?
そして、サイズ20の少しベクトルを表現することは可能ですか(どのように?)おそらく24ビット / 3バイトベクトルを作成し、4ビットを無視することを考えています。
解決
図書館 Bitvector この目的のための純粋なパイソンライブラリであり、指定したニーズに合うはずです。
他のヒント
これは、内容なしでリストをエクスポートするためのPowerShellコードです。
$web = Get-SPWeb -Identity "SiteUrl"
$list = $web.Lists["ListName"]
$list.SaveAsTemplate("File_Name.stp", "List_Template_Title",
"Description", $false);
. ビタレイ モジュールは、ブール値を使用してこれを効率的に行います。
現在この質問に対する答えの肯定版があるとは思わない:
このツールは、すべてのコンテンツをマイグレーションすることを可能にします。 http://www.metavistech.com/category/tools-office-365
その間に、コンテンツを移行するときに、次のことを実行できます。
中央管理者、敷地内のオンラインの場所に、MySiteホストの場所をオンラインの場所に変更します。アプリケーション管理>ユーザープロファイルサービスアプリ>マイサイトの設定>マイサイトのホストの場所
これはそれらをオンラインの場所にリダイレクトする
と、ユーザープロファイルサービスのユーザー権限を介して、ユーザーがMySiteを作成する機能をオフにします。
少し日付が付けられていますが、比較のためだけに別のstdlibオプションをここに残します。また、これを使用して簡単に行うこともできます ctypes モジュール。
例えば:
そして、サイズ20の少しベクトルを表現することは可能ですか(どのように?)おそらく24ビット / 3バイトベクトルを作成し、4ビットを無視することを考えています。
class Simple(ctypes.LittleEndianStructure):
_pack_ = 1
_fields_ = [
('one', ctypes.c_ubyte, 8),
('two', ctypes.c_ubyte, 8),
('three', ctypes.c_ubyte, 8)
]
s = Simple(0, 2, 256)
bytearray(s) # bytearray(b'\x00\x02\x00')
s = Simple(0, 2, 255)
bytearray(s) # bytearray(b'\x00\x02\xff')
class Simple(ctypes.BigEndianStructure):
_pack_ = 1
_fields_ = [
('one', ctypes.c_ubyte, 8),
('two', ctypes.c_ubyte, 8),
('three', ctypes.c_ubyte, 8)
]
s = Simple(0, 2, 256)
bytearray(s) # bytearray(b'\x00\x02\x00')
s = Simple(0, 2, 255)
bytearray(s) # bytearray(b'\x00\x02\xff')
s.two |= 3
bytearray(s) # bytearray(b'\x00\x03\xff')
またはこのようなより簡単な何か:
class bit_vector(Structure):
_fields_ = [('bits', c_uint32, 24),
('unused', c_uint32, 8),
]
bv = bit_vector()
# turn on the 18th bit -- being explicit just to demo it
bv.bits |= int('000000000000000001000000', 2)
bin(bv.bits) # 0b1000000
使用する struct モジュール。
純粋なパイソンもあります Python-Bitstring (Python 3サポート付き)。