Statevector 클래스에는 tensor 메서드가 있으며, 이는 인자로 주어진 다른 Statevector와의 텐서곱을 반환합니다.
인자는 오른쪽의 텐서 인수로 해석됩니다.
예를 들어, 아래에서는 ∣0⟩과 ∣1⟩을 나타내는 두 개의 상태 벡터를 생성하고, tensor 메서드를 사용하여 새로운 벡터 ∣ψ⟩=∣0⟩⊗∣1⟩을 만듭니다.
여기서는 ∣0⟩ 및 ∣1⟩ 상태를 직접 정의하는 대신 from_label 메서드를 사용하여 정의하고 있다는 점에 유의해 주세요.
zero = Statevector.from_label("0") one = Statevector.from_label("1") psi = zero.tensor(one) display(psi.draw("latex"))
∣01⟩
허용되는 다른 레이블에는 플러스 및 마이너스 상태를 위한 "+"와 "-"가 있으며, 다음 상태들을 위한 "r"과 "l"("right" 및 "left"의 약어)이 있습니다.
∣+i⟩=21∣0⟩+2i∣1⟩and∣−i⟩=21∣0⟩−2i∣1⟩.
여기서 "+", "-" 또는 "right"와 "left"는 양자역학적 스핀의 맥락에서 유래한 것으로, 실험에서 스핀의 성분이 왼쪽이나 오른쪽을 가리킬 수 있음을 의미합니다. 이는 다중 Qubit 시스템에서 가장 오른쪽이나 가장 왼쪽 Qubit을 가리키는 것이 아닙니다. 다음은 ∣+⟩과 ∣−i⟩의 텐서곱의 예입니다.
plus = Statevector.from_label("+") minus_i = Statevector.from_label("l") phi = plus.tensor(minus_i) display(phi.draw("latex"))
21∣00⟩−2i∣01⟩+21∣10⟩−2i∣11⟩
다른 방법은 텐서곱을 위한 ^ 연산을 사용하는 것이며, 당연히 동일한 결과를 제공합니다.
display((plus ^ minus_i).draw("latex"))
21∣00⟩−2i∣01⟩+21∣10⟩−2i∣11⟩
Operator 클래스에도 tensor 메서드(그리고 from_label 메서드)가 있으며, 다음 예제들에서 확인할 수 있습니다.
H = Operator.from_label("H") Id = Operator.from_label("I") X = Operator.from_label("X") display(H.tensor(Id).draw("latex")) display(H.tensor(Id).tensor(X).draw("latex"))
이전 레슨에서는 measure 메서드를 사용하여 양자 상태 벡터의 측정을 시뮬레이션했습니다.
이 메서드는 시뮬레이션된 측정 결과와 이 측정 이후의 새로운 Statevector라는 두 가지 항목을 반환합니다.
기본적으로 measure는 상태 벡터의 모든 Qubit을 측정합니다.
대안으로, 정수 리스트를 인자로 제공하여 해당 Qubit 인덱스만 측정되도록 할 수 있습니다.
이를 보여드리기 위해, 아래 코드는 다음 상태를 생성합니다.
∣w⟩=3∣001⟩+∣010⟩+∣100⟩
그리고 가장 오른쪽 Qubit인 0번 Qubit을 측정합니다.
(Qiskit은 Qubit을 오른쪽에서 왼쪽으로, 0부터 시작하여 번호를 매깁니다. 이 번호 매기기 규약은 다음 레슨에서 다시 다루겠습니다.)
w = Statevector([0,1,1,0,1,0,0,0]/ sqrt(3)) display(w.draw("latex")) result, state = w.measure([0]) print(f"Measured: {result}\nState after measurement:") display(state.draw("latex")) result, state = w.measure([0,1]) print(f"Measured: {result}\nState after measurement:") display(state.draw("latex"))