Skip to main content
IBM Quantum Platform

group_order

group_order(op)

演算子のコピーを返し、その項はグループインデックスの順に並べ替えられます。

用語はグループインデックスのみでソートされるため、各グループは連続した用語の列となり、グループインデックスは非減少順となる。 このソートは安定しているため、グループ内の項は相対的な順序を保ちます。つまり、まず標準的な順序で並べ、次にグループごとに並べ替えることで、標準的な順序を置き換えるのではなく、それをさらに精緻化するのです。 式そのものは変更されません。これは単に項の順序を入れ替えるだけであり、式を簡略化したり、演算子の順序を標準化したりするものではありません。

これは、この OperatorTrait プロトコルを実装する組み込み演算子タイプであればどれでも機能します。返される演算子は、入力と同じ型になります。

グループインデックスは、どの項がグループをなすかを指定するだけなので、これにより演算子の配置は変わりますが、その値は変わりません。 このレイアウトがもたらすのは、検索コストの削減です。通常、要求されたグループを見つけるにはすべての項をスキャンする必要があります split_out_groups() が、グループ順に並べられた演算子では、各グループの項が1つの範囲を形成するため、二分探索によってその範囲を特定できます。したがって、検索コストは、 保持されている項の数ではなく、 要求されたグループの数に応じて決まります。 大規模な演算子からいくつかのグループを繰り返しサンプリングするループからこの呼び出しを抜き出すことで、こうしたルックアップの処理コストを抑えることができるのです。

注

グループを追跡していない演算子(例を参照 groups)には並べ替えの基準がないため、変更されていないコピーとして返されます。したがって、これは各ステップでガードのないパイプラインとして合成されます。 結果にはグループも一切含まれていません。

>>> from qiskit_fermions.operators import FermionOperator
>>> from qiskit_fermions.operators.terms.ordering import group_order
>>> op = FermionOperator.from_dict(
...     {
...         ((True, 0), (False, 1)): 1.0,
...         ((True, 1), (False, 0)): 2.0,
...         ((True, 2), (False, 3)): 3.0,
...     }
... )
>>> op.groups = [1, 0, 1]  # group 1's terms are not contiguous
>>> ordered = group_order(op)
>>> print(ordered.groups)
[0, 1, 1]

パラメーター

op – 順序を変更する項を持つ演算子。

戻り値

グループインデックスの順に項が並べられた、同じ型の新しい演算子。

昇給

TypeError – がサポートされていない演算子タイプ op である場合(を参照 OperatorTrait)。

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。