order_terms
order_terms(op, key, *, reverse=False)
Gibt eine Kopie eines Operators zurück, dessen Terme nach einem vom Benutzer angegebenen Schlüssel neu geordnet wurden.
Im Gegensatz zu canonical_order(), das eine einzige feste, koeffizientenunabhängige Reihenfolge vorschreibt, können Sie mit dieser Funktion die Terme nach beliebigen Kriterien sortieren: Die Funktion key wird auf jeden Term genau so angewendet wie es tun würde sorted() , und die Terme werden in der resultierenden Reihenfolge zu einem neuen Operator desselben Typs neu zusammengesetzt. Dies ist immer dann nützlich, wenn die Reihenfolge der Terme für eine nachfolgende Berechnung von Bedeutung ist (z. B. bei der zufälligen Stichprobenentnahme aus Produktformeln), da man so eine deterministische, reproduzierbare Reihenfolge erhält, die unabhängig davon ist, wie der Operator zufällig zusammengesetzt wurde.
Die Terme selbst bleiben unverändert – dadurch werden sie lediglich neu angeordnet, der Operator wird jedoch weder vereinfacht noch in Normalform gebracht. Dies funktioniert für alle integrierten Operatortypen, die das OperatorTrait Protokoll implementieren; der zurückgegebene Operator hat denselben Typ wie die Eingabe.
Die key erhält jeden Term als dasselbe Tupel, das auch der Operator iter_terms() liefert – oder, wenn der Operator Gruppen nachverfolgt (siehe groups), als das längere Tupel aus iter_terms_with_groups(), dessen letztes Element der Gruppenindex des Terms ist. Die genaue Form des Ausdrucks hängt vom Operator-Typ ab. Gruppenindizes bleiben erhalten – jeder Term behält seinen Gruppenindex bei, wenn er verschoben wird –, und wenn die Eingabe keine Gruppen enthält, enthält auch das Ergebnis keine.
>>> from qiskit_fermions.operators import FermionOperator
>>> from qiskit_fermions.operators.terms.ordering import order_terms
>>> op = FermionOperator.from_dict(
... {
... ((True, 1), (False, 0)): 1.0, # a†_1 a_0, |coeff| = 1
... ((True, 0), (False, 1)): 3.0, # a†_0 a_1, |coeff| = 3
... }
... )
>>> ordered = order_terms(op, key=lambda term: abs(term[1]), reverse=True)
>>> list(ordered.iter_terms())
[([(True, 0), (False, 1)], (3+0j)), ([(True, 1), (False, 0)], (1+0j))]
Parameter
- op (OperatorTrait) – der Operator, dessen Ausdrücke neu geordnet werden sollen.
- key (Callable[[tuple], Any]) – eine Funktion mit einem einzigen Term, die genau als Argument
keyvon verwendet wirdsorted(). Es empfängt jeden Term als das in der obigen Anmerkung beschriebene Tupel. - reverse (bool) – Wenn
True, werden die Terme in absteigender Reihenfolge nach sortiertkey.
Rückgabe
Ein neuer Operator desselben Typs, dessen Terme in der gewünschten Reihenfolge stehen.
Rückgabetyp