Skip to main content
IBM Quantum Platform

DensityMatrix

class qiskit.quantum_info.DensityMatrix(data, dims=None)

GitHub

Bases: QuantumState, TolerancesMixin

DensityMatrix 클래스

밀도 행렬 객체를 초기화합니다.

매개변수

  • data (np.ndarray | list |QuantumCircuit |circuit.instruction.Instruction | QuantumState) – 밀도 행렬을 구성할 수 있는 상태 벡터, 양자 명령어 또는 또는 to_matrix 메서드를 to_operator 가진 객체. 벡터가 주어지면, 밀도 행렬은 해당 벡터의 투영자로 구성된다. 양자 명령어의 경우, 밀도 행렬은 모든 큐비트가 0 상태로 초기화되었다고 가정하여 구성됩니다.
  • dims (int |tuple |list | None) – 상태의 하위 시스템 차원(추가 정보 참조).

레이즈

QiskitError – 입력 데이터가 유효하지 않은 경우.

추가 정보:

dims kwarg는 None, 정수 또는 정수의 이터러블일 수 있습니다.

  • Iterable - 에서 하위 시스템 차원은 목록의 길이에 따라 주어진 총 하위 시스템 수를 가진 목록의 값입니다.
  • Int 또는 None - 입력 행렬의 선행 차원은 밀도 행렬의 총 차원을 지정합니다. 2의 거듭제곱인 경우 상태는 N-큐비트 상태로 초기화됩니다. 2의 거듭제곱이 아닌 경우 상태는 단일 D차원 하위 시스템을 갖게 됩니다.

속성

atol

기본값: 1e-08

data

데이터를 반환합니다.

dim

총 상태 차원을 반환합니다.

num_qubits

N-큐비트 상태인 경우 큐비트 수를 반환하고, 그렇지 않으면 없음으로 반환합니다.

rtol

기본값: 1e-05

settings

설정을 반환합니다.


메소드

conjugate

conjugate()

GitHub

밀도 행렬의 공액을 반환합니다.

copy

copy()

GitHub

현재 운영자의 사본을 만듭니다.

dims

dims(qargs=None)

GitHub

지정된 하위 시스템에 대한 입력 차원의 튜플을 반환합니다.

draw

draw(output=None, **drawer_args)

GitHub

밀도 행렬을 시각화하여 반환합니다.

repr : ASCII TextMatrix 의 __repr__.

텍스트 : 콘솔에서 인쇄할 수 있는 ASCII TextMatrix.

라텍스 : 주피터 노트북에 표시하기 위한 IPython 라텍스 객체입니다.

latex_source : LaTeX 을 사용하여 배열을 생성하기 위한 컴파일되지 않은 원시 ASCII 소스입니다.

qsphere : Matplotlib 그림, plot_state_qsphere()를 사용한 밀도 행렬 렌더링.

힌튼 : Matplotlib 그림, plot_state_hinton()을 사용한 밀도 행렬 렌더링.

bloch : Matplotlib 그림, plot_bloch_multivector()를 사용한 밀도 행렬 렌더링.

매개변수

  • output (str) – 상태를 그리는 데 사용할 출력 방법을 선택합니다. 유효한 선택 항목은 repr, text, latex, latex_source, qsphere, hinton 또는 bloch입니다. 기본값은 repr입니다. 기본값은 [default] 아래 ~/.qiskit/settings.confstate_drawer = <default> 줄을 추가하여 변경할 수 있습니다.
  • drawer_args - 관련 그리기 함수 또는 생성자에 직접 전달할 인수 ( TextMatrix( ), array_to_latex(), plot_state_qsphere(), plot_state_hinton() 또는 plot_bloch_multivector()). 해당 함수에 대한 설명서는 qiskit.visualization 에서 해당 함수를 참조하세요.

리턴

matplotlib.Figure 또는 str 또는 TextMatrix 또는 IPython.display.Latex: 밀도 행렬의 도식.

레이즈

ValueError - 잘못된 출력 방법을 선택한 경우.

evolve

evolve(other, qargs=None)

GitHub

연산자가 양자 상태를 진화시킵니다.

매개변수

리턴

출력 밀도 행렬입니다.

레이즈

QiskitError – 연산자 차원이 지정된 ‘ QuantumState ’ 하위 시스템의 차원과 일치하지 않는 경우.

리턴 유형

DensityMatrix

expand

expand(other)

GitHub

텐서 곱 상태 other ⊗ self를 반환합니다.

매개변수

other (DensityMatrix) – 양자 상태 객체입니다.

리턴

텐서 곱 상태는 다른 ⊗ 자기입니다.

리턴 유형

DensityMatrix

레이즈

QiskitError – ‘other’가 양자 상태가 아닌 경우.

expectation_value

expectation_value(oper, qargs=None)

GitHub

연산자의 기대값을 계산합니다.

매개변수

  • oper (Operator) – 연산자를 사용하여 expval을 평가할 수 있습니다.
  • qargs (None or list) – 연산자를 적용할 하위 시스템을 설정합니다.

리턴

기대값을 입력합니다.

리턴 유형

복합체

from_instruction

classmethod from_instruction(instruction)

GitHub

인스트럭션의 출력 밀도 행렬을 반환합니다.

상태 벡터는 입력 명령어 또는 회로와 동일한 큐비트 수의 상태 0,,0|{0,\ldots,0}\rangle 로 초기화되고, 입력 명령어에 의해 진화하며, 출력 상태 벡터가 반환됩니다.

매개변수

instruction (circuit.instruction.Instruction |QuantumCircuit) – 명령어 또는 회로

리턴

최종 밀도 행렬입니다.

레이즈

QiskitError – 명령어에 밀도 행렬 시뮬레이션에 사용할 수 없는 명령어가 포함된 경우.

리턴 유형

DensityMatrix

from_int

static from_int(i, dims)

GitHub

계산 기준 상태 밀도 행렬을 반환합니다.

매개변수

  • i (int) – 기본 상태 요소입니다.
  • dims (int ortuple orlist) – 상태벡터의 하위 시스템 차원(추가 정보 참조).

리턴

계산 기준 상태 i ⁣i|i\rangle\!\langle i|.

리턴 유형

DensityMatrix

추가 정보:

dims kwarg는 정수 또는 정수의 이터러블일 수 있습니다.

  • Iterable - 에서 하위 시스템 차원은 목록의 길이에 따라 주어진 총 하위 시스템 수를 가진 목록의 값입니다.
  • Int - 정수는 상태의 전체 차원을 지정합니다. 2의 거듭제곱인 경우 상태는 N-큐비트 상태로 초기화됩니다. 2의 거듭제곱이 아닌 경우 상태는 단일 D차원 하위 시스템을 갖게 됩니다.

from_label

classmethod from_label(label)

GitHub

폴리 X,Y,Z 고유 상태의 텐서 곱을 반환합니다.

레이블
상태 벡터
"0"(1000)\begin{pmatrix} 1 & 0 \\ 0 & 0 \end{pmatrix}
"1"(0001)\begin{pmatrix} 0 & 0 \\ 0 & 1 \end{pmatrix}
"+"12(1111)\frac{1}{2}\begin{pmatrix} 1 & 1 \\ 1 & 1 \end{pmatrix}
"-"12(1111)\frac{1}{2}\begin{pmatrix} 1 & -1 \\ -1 & 1 \end{pmatrix}
"r"12(1ii1)\frac{1}{2}\begin{pmatrix} 1 & -i \\ i & 1 \end{pmatrix}
"l"12(1ii1)\frac{1}{2}\begin{pmatrix} 1 & i \\ -i & 1 \end{pmatrix}

매개변수

label (string) – 고유상태 문자열 ket 라벨(허용되는 값은 표 참조).

리턴

N-큐비트 기반 상태 밀도 행렬입니다.

리턴 유형

DensityMatrix

레이즈

QiskitError – 레이블에 유효하지 않은 문자가 포함되어 있거나, 레이블의 길이가 명시적으로 지정된 num_qubits보다 큰 경우.

is_valid

is_valid(atol=None, rtol=None)

GitHub

트레이스 1과 양의 반정수이면 True를 반환합니다.

measure

measure(qargs=None)

GitHub

하위 시스템을 측정하고 결과 및 측정 후 상태를 반환합니다.

이 함수는 측정 결과 샘플링을 위해 QuantumStates 내부 난수 생성기를 사용합니다. RNG 시드는 seed() 메서드를 사용하여 설정할 수 있습니다.

매개변수

qargs (list or None) – 측정값을 샘플링할 하위 시스템을 지정합니다(없음인 경우 모든 하위 시스템의 측정값을 샘플링합니다(기본값: 없음).

리턴

(outcome, state) 여기서 outcome

측정 결과 문자열 레이블, state 은 해당 결과에 대한 축소된 측정 후 상태입니다.

리턴 유형

튜플

partial_transpose

partial_transpose(qargs)

GitHub

부분적으로 전치된 밀도 행렬을 반환합니다.

매개변수

qargs (list) – 전치할 하위 시스템입니다.

리턴

부분적으로 전치된 밀도 행렬입니다.

리턴 유형

DensityMatrix

probabilities

probabilities(qargs=None, decimals=None)

GitHub

하위 시스템 측정 확률 벡터를 반환합니다.

측정 확률은 계산(대각선) 기준의 측정에 관한 것입니다.

매개변수

  • qargs (None or list) – 하위 시스템 중 확률을 반환할 하위 시스템을 지정합니다(없음이 모든 하위 시스템에 대해 반환하는 경우 기본값: 없음).
  • decimals (None or int) – 값을 반올림할 소수점 이하 자릿수입니다. 없음인 경우 반올림이 수행되지 않습니다(기본값: 없음).

리턴

확률의 넘피 벡터 배열입니다.

리턴 유형

np.array

예제

2쿼트 제품 상태 ρ=ρ1ρ0\rho=\rho_1\otimes\rho_0ρ1=+ ⁣+\rho_1=|+\rangle\!\langle+|, ρ0=0 ⁣0\rho_0=|0\rangle\!\langle0| 를 예로 들어 보겠습니다.

from qiskit.quantum_info import DensityMatrix

rho = DensityMatrix.from_label('+0')

# Probabilities for measuring both qubits
probs = rho.probabilities()
print('probs: {}'.format(probs))

# Probabilities for measuring only qubit-0
probs_qubit_0 = rho.probabilities([0])
print('Qubit-0 probs: {}'.format(probs_qubit_0))

# Probabilities for measuring only qubit-1
probs_qubit_1 = rho.probabilities([1])
print('Qubit-1 probs: {}'.format(probs_qubit_1))
probs: [0.5 0.  0.5 0. ]
Qubit-0 probs: [1. 0.]
Qubit-1 probs: [0.5 0.5]

또한 qargs 목록의 큐비트 순서를 순열하여 확률 출력에서 큐비트 위치를 변경할 수 있습니다

from qiskit.quantum_info import DensityMatrix

rho = DensityMatrix.from_label('+0')

# Probabilities for measuring both qubits
probs = rho.probabilities([0, 1])
print('probs: {}'.format(probs))

# Probabilities for measuring both qubits
# but swapping qubits 0 and 1 in output
probs_swapped = rho.probabilities([1, 0])
print('Swapped probs: {}'.format(probs_swapped))
probs: [0.5 0.  0.5 0. ]
Swapped probs: [0.5 0.5 0.  0. ]

probabilities_dict

probabilities_dict(qargs=None, decimals=None)

GitHub

하위 시스템 측정 확률 사전을 반환합니다.

측정 확률은 계산(대각선) 기준의 측정에 관한 것입니다.

이 사전 표현은 사전 키가 하위 시스템 기준 벡터에 대한 쿼트 문자열인 Ket과 유사한 표기법을 사용합니다. 하위 시스템의 차원이 10보다 큰 경우 하위 시스템을 구분할 수 있도록 정수 사이에 쉼표 구분 기호를 삽입합니다.

매개변수

  • qargs (None or list) – 하위 시스템 중 확률을 반환할 하위 시스템을 지정합니다(없음이 모든 하위 시스템에 대해 반환하는 경우 기본값: 없음).
  • decimals (None or int) – 값을 반올림할 소수점 이하 자릿수입니다. 없음인 경우 반올림이 수행되지 않습니다(기본값: 없음).

리턴

딕셔너리(케트) 형식의 측정 확률입니다.

리턴 유형

dict

purity

purity()

GitHub

양자 상태의 순도를 반환합니다.

reset

reset(qargs=None)

GitHub

상태 또는 하위 시스템을 0 상태로 초기화합니다.

매개변수

qargs (list or None) – 를 선택하면 모든 하위 시스템이 0 상태로 초기화됩니다(기본값: 없음).

리턴

리셋 상태입니다.

리턴 유형

DensityMatrix

추가 정보:

모든 하위 시스템이 재설정되면, 모든 하위 시스템이 초기 상태로 돌아갑니다. 일부 하위 시스템만 재설정된 경우, 이 함수는 재설정된 하위 시스템에 SuperOp 따라 진화를 수행합니다.

reverse_qargs

reverse_qargs()

GitHub

하위 시스템 순서가 반전된 DensityMatrix 을 반환합니다.

텐서 곱 상태의 경우 이는 텐서 곱 하위 시스템의 순서를 뒤집는 것과 같습니다. 밀도 행렬 ρ=ρn1...ρ0\rho = \rho_{n-1} \otimes ... \otimes \rho_0 의 경우 반환된 상태는 ρ0...ρn1\rho_0 \otimes ... \otimes \rho_{n-1} 입니다.

리턴

하위 시스템 순서가 역전된 상태입니다.

리턴 유형

DensityMatrix

sample_counts

sample_counts(shots, qargs=None)

GitHub

큐비트 측정 결과의 딕셔너리를 계산 기반으로 샘플링합니다.

매개변수

  • shots (int) – 생성할 샘플 수입니다.
  • qargs (None or list) – 측정값을 샘플링할 하위 시스템을 지정합니다(없음인 경우 모든 하위 시스템의 측정값을 샘플링합니다(기본값: 없음).

리턴

샘플링된 카운트 사전.

리턴 유형

계수

추가 정보:

이 함수는 현재 상태에 대한 측정값 probabilities() 를 사용하여 측정 결과를 샘플링합니다. 실제로 측정을 구현하지 않으므로 현재 상태가 수정되지 않습니다.

샘플링에 사용되는 난수 생성기의 시드는 state의 seed() 메서드를 사용하여 고정된 값으로 설정할 수 있습니다.

sample_memory

sample_memory(shots, qargs=None)

GitHub

큐비트 측정 결과 목록을 계산 기준으로 샘플링합니다.

매개변수

  • shots (int) – 생성할 샘플 수입니다.
  • qargs (None or list) – 측정값을 샘플링할 하위 시스템을 지정합니다(없음인 경우 모든 하위 시스템의 측정값을 샘플링합니다(기본값: 없음).

리턴

표본 추출 순서대로 정렬된 표본 개수 목록.

리턴 유형

np.array

추가 정보:

이 함수는 현재 상태에 대한 측정값 probabilities() 를 사용하여 측정 결과를 샘플링합니다. 실제로 측정을 구현하지 않으므로 현재 상태가 수정되지 않습니다.

샘플링에 사용되는 난수 생성기의 시드는 state의 seed() 메서드를 사용하여 고정된 값으로 설정할 수 있습니다.

seed

seed(value=None)

GitHub

양자 상태 RNG의 시드를 설정합니다.

tensor

tensor(other)

GitHub

텐서 곱 상태 self ⊗ other를 반환합니다.

매개변수

other (DensityMatrix) – 양자 상태 객체입니다.

리턴

텐서 곱 연산자 자기 ⊗ 다른.

리턴 유형

DensityMatrix

레이즈

QiskitError – ‘other’가 양자 상태가 아닌 경우.

to_dict

to_dict(decimals=None)

GitHub

밀도 행렬을 사전 형식으로 변환합니다.

이 사전 표현은 사전 키가 하위 시스템 기준 벡터에 대한 쿼트 문자열인 Ket과 유사한 표기법을 사용합니다. 하위 시스템의 차원이 10보다 큰 경우 하위 시스템을 구분할 수 있도록 정수 사이에 쉼표 구분 기호를 삽입합니다.

매개변수

decimals (None or int) – 값을 반올림할 소수점 이하 자릿수입니다. 없음인 경우 반올림이 수행되지 않습니다(기본값: 없음).

리턴

의 사전적 형태인 DensityMatrix.

리턴 유형

dict

예제

2쿼비트 밀도 행렬의 케트 형태 rho= ⁣0 ⁣0rho = |-\rangle\!\langle -|\otimes |0\rangle\!\langle 0|

from qiskit.quantum_info import DensityMatrix

rho = DensityMatrix.from_label('-0')
print(rho.to_dict())
{
    '00|00': (0.4999999999999999+0j),
    '10|00': (-0.4999999999999999-0j),
    '00|10': (-0.4999999999999999+0j),
    '10|10': (0.4999999999999999+0j)
}

비쿼비트 하위 시스템의 경우 정수 범위는 0에서 9까지 가능합니다. 예를 들어 큐트리트 시스템에서

import numpy as np
from qiskit.quantum_info import DensityMatrix

mat = np.zeros((9, 9))
mat[0, 0] = 0.25
mat[3, 3] = 0.25
mat[6, 6] = 0.25
mat[-1, -1] = 0.25
rho = DensityMatrix(mat, dims=(3, 3))
print(rho.to_dict())
{'00|00': (0.25+0j), '10|10': (0.25+0j), '20|20': (0.25+0j), '22|22': (0.25+0j)}

큰 하위 시스템 치수의 경우 구분 기호가 필요합니다. 다음 예는 큐비트와 10차원 큐디트로 구성된 20차원 시스템에 대한 예입니다.

import numpy as np
from qiskit.quantum_info import DensityMatrix

mat = np.zeros((2 * 10, 2 * 10))
mat[0, 0] = 0.5
mat[-1, -1] = 0.5
rho = DensityMatrix(mat, dims=(2, 10))
print(rho.to_dict())
{'00|00': (0.5+0j), '91|91': (0.5+0j)}

to_operator

to_operator()

GitHub

연산자로 변환

리턴 유형

운영자

to_statevector

to_statevector(atol=None, rtol=None)

GitHub

순수 밀도 행렬에서 상태 벡터를 반환합니다.

매개변수

  • atol (float) – 작업 유효성 확인을 위한 절대 허용 오차.
  • rtol (float) – 작업 유효성 확인을 위한 상대적 허용 오차.

리턴

순수 밀도 행렬의 해당 상태벡터입니다.

유일하게 0이 아닌 고유값의 고유 벡터에 해당합니다.

리턴 유형

상태 벡터

레이즈

QiskitError – 상태가 순수하지 않은 경우.

trace

trace()

GitHub

밀도 행렬의 트레이스를 반환합니다.

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.