filter_diagonal_terms
filter_diagonal_terms(op)
직업-번호 기저에서 대각선에 위치한 연산자의 항들을 걸러낸다.
이는 주어진 식에서 수 연산자의 곱( ) FermionOperator 인 모든 항을 제거합니다. 여기에는 상수 항(수 연산자 0의 곱), 단일 수 연산자뿐만 아니라 와 같은 고차 곱도 포함됩니다.
이러한 항을 필터링해야 하는 주요 동기는 연산자의 시간 진화 과정에서 발생하는데, 이러한 대각 항들은 전역 위상을 도입하는 것 외에는 시간 진화에 영향을 미치지 않기 때문이다. 따라서, 시간의 흐름에 따라 변화한 상태에서 추출된 비트열은 영향을 받지 않습니다. 따라서, 예를 들어 SqDRIFT, 에서 사용하는 qDRIFT 의 시간 진화 계산을 위한 전자 구조 해밀토니안을 준비할 때와 같이, 이를 제거하는 것이 권장되는데, 이는 그렇지 않을 경우 불필요한 샘플링 오버헤드를 피할 수 있기 때문이다.
제공된 연산자는 정상 순서여야 합니다! 이는 검증되지 않은 구현의 기본 가정입니다. 해당 형태의 연산자를 구하는 방법은 를 normal_ordered() 참조하십시오.
연산자는 그 자리에서 수정됩니다. 그룹 인덱스를 추적하는 경우(참조 groups), 남아 있는 항들은 상대적인 그룹 구성을 유지하지만, 그룹 인덱스는 0부터 시작하는 연속된 범위로 재할당됩니다. 따라서 이 함수를 호출하는 동안 어떤 용어의 특정 그룹 인덱스가 유지된다고 가정해서는 안 됩니다.
>>> from qiskit_fermions.operators import FermionOperator
>>> from qiskit_fermions.operators.terms.filtering import filter_diagonal_terms
>>> op = FermionOperator.from_dict(
... {
... (): 1.0, # constant (diagonal)
... ((True, 0), (False, 0)): 2.0, # n_0 (diagonal)
... ((True, 0), (True, 1), (False, 1), (False, 0)): 3.0, # n_0 n_1 (diagonal)
... ((True, 0), (False, 1)): 4.0, # a†_0 a_1 (off-diagonal)
... }
... )
>>> filter_diagonal_terms(op)
>>> list(op.iter_terms())
[([(True, 0), (False, 1)], (4+0j))]
매개변수
op – 대각 원소를 걸러내야 할 정상 순서 연산자.