회로를 시각화하다
이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 다음 버전 이상을 사용하는 것이 좋습니다.
qiskit[all]~=2.5.2
생성 중인 회로를 보는 것은 종종 유용합니다. 다음 옵션을 사용하여 키스킷 회로를 표시할 수 있습니다.
from qiskit import QuantumCircuit양자 회로를 그리세요
QuantumCircuit 클래스는 draw() 메서드를 통해 회로를 그리거나 회로 객체를 인쇄하여 회로를 그릴 수 있도록 지원합니다. 기본적으로 둘 다 회로도의 ASCII 아트 버전을 렌더링합니다.
print 은 None 을 반환하지만 다이어그램을 인쇄하는 부작용이 있는 반면 QuantumCircuit.draw 은 부작용 없이 다이어그램을 반환한다는 점에 유의하세요. 주피터 노트북은 각 셀의 마지막 줄의 출력을 표시하기 때문에 동일한 효과가 있는 것처럼 보입니다.
# Build a quantum circuit
circuit = QuantumCircuit(3, 3)
circuit.x(1)
circuit.h(range(3))
circuit.cx(0, 1)
circuit.measure(range(3), range(3));print(circuit)Output:
┌───┐ ┌─┐
q_0: ┤ H ├───────■──┤M├───
├───┤┌───┐┌─┴─┐└╥┘┌─┐
q_1: ┤ X ├┤ H ├┤ X ├─╫─┤M├
├───┤└┬─┬┘└───┘ ║ └╥┘
q_2: ┤ H ├─┤M├───────╫──╫─
└───┘ └╥┘ ║ ║
c: 3/═══════╩════════╩══╩═
2 0 1
circuit.draw()Output:
┌───┐ ┌─┐
q_0: ┤ H ├───────■──┤M├───
├───┤┌───┐┌─┴─┐└╥┘┌─┐
q_1: ┤ X ├┤ H ├┤ X ├─╫─┤M├
├───┤└┬─┬┘└───┘ ║ └╥┘
q_2: ┤ H ├─┤M├───────╫──╫─
└───┘ └╥┘ ║ ║
c: 3/═══════╩════════╩══╩═
2 0 1
대체 렌더러
텍스트 출력은 회로를 개발하는 동안 출력을 빠르게 확인하는 데 유용하지만 유연성이 떨어지는 단점이 있습니다. 양자 회로에는 두 가지 대체 출력 렌더러가 있습니다. 하나는 용도 Matplotlib 를 사용하고 다른 하나는 LaTeX. LaTeX 렌더러에는 qcircuit 패키지가 필요합니다. "output" 인수를 문자열 mpl 및 latex 으로 설정하여 이러한 렌더러를 선택합니다.
OSX 사용자는 mactex 패키 지를 통해 필요한 LaTeX 패키지를 받을 수 있습니다.
# Matplotlib drawing
circuit.draw(output="mpl")Output:
# Latex drawing
circuit.draw(output="latex")Output:
출력 내용 저장
주피터 노트북에서 대규모 회로를 인라인으로 그리면 속도가 느리거나 판독이 어려울 수 있습니다. 다이어그램을 파일에 직접 저장한 다음 이미지 뷰어에서 열어 필요에 따라 확대할 수 있습니다.
# Save as an image using the Matplotlib drawer
circuit.draw(output="mpl", filename="circuit-mpl.jpeg")Output:
# Or save a LaTeX rendering
circuit.draw(output="latex", filename="circuit-latex.pdf")Output:
제어 회로도
기본적으로 draw() 메서드는 렌더링된 이미지를 객체로 반환하고 아무것도 출력하지 않습니다. 반환되는 정확한 클래스는 지정된 출력에 따라 다릅니다: 'text' (기본값)은 TextDrawer 객체를 반환하고, 'mpl' 은 matplotlib.Figure 객체를 반환하며, latex 은 PIL.Image 객체를 반환합니다. Jupyter 노트북은 이러한 반환 유형을 이해하고 올바르게 렌더링하지만, Jupyter 외부에서 실행할 때는 이미지가 자동으로 표시되지 않습니다.
draw() 메서드에는 출력을 표시하거나 저장하기 위한 선택적 인수가 있습니다. 지정하면 filename kwarg는 렌더링된 출력을 저장하는 경로를 사용합니다. 또는 mpl 또는 latex 출력을 사용하는 경우, interactive kwarg를 사용해 새 창에서 이미지를 열 수 있습니다(노트북 내에서 항상 작동하는 것은 아님).
출력 맞춤 설정
출력에 따라 회로도를 사용자 지정할 수 있는 옵션도 있습니다.
플롯 장벽 비활성화 및 비트 순서 반전
처음 두 옵션은 세 백엔드 모두에서 공유됩니다. 이를 통해 비트 주문과 장벽을 그릴지 여부를 모두 구성할 수 있습니다. 이는 각각 reverse_bits kwarg 및 plot_barriers kwarg로 설정할 수 있습니다. 다음 예제는 모든 출력 렌더러에서 작동하며, 여기서는 간결성을 위해 mpl 을 사용했습니다.
from qiskit import QuantumRegister, ClassicalRegister
# Draw a new circuit with barriers and more registers
q_a = QuantumRegister(3, name="a")
q_b = QuantumRegister(5, name="b")
c_a = ClassicalRegister(3)
c_b = ClassicalRegister(5)
circuit = QuantumCircuit(q_a, q_b, c_a, c_b)
circuit.x(q_a[1])
circuit.x(q_b[1])
circuit.x(q_b[2])
circuit.x(q_b[4])
circuit.barrier()
circuit.h(q_a)
circuit.barrier(q_a)
circuit.h(q_b)
circuit.cswap(q_b[0], q_b[1], q_b[2])
circuit.cswap(q_b[2], q_b[3], q_b[4])
circuit.cswap(q_b[3], q_b[4], q_b[0])
circuit.barrier(q_b)
circuit.measure(q_a, c_a)
circuit.measure(q_b, c_b);# Draw the circuit
circuit.draw(output="mpl")Output:
# Draw the circuit with reversed bit order
circuit.draw(output="mpl", reverse_bits=True)Output:
# Draw the circuit without barriers
circuit.draw(output="mpl", plot_barriers=False)Output:
렌더러별 맞춤 설정
사용 가능한 일부 사용자 지정 옵션은 렌더러에 따라 다릅니다.
fold 인수는 출력의 최대 너비를 설정합니다. text 렌더러에서는 다음 줄로 래핑되기 전 다이어그램의 줄 길이를 설정합니다. 'mpl' 렌더러를 사용하는 경우 다음 줄로 접히기 전의 (시각적) 레이어 수입니다.
mpl 렌더러에는 색과 윤곽선을 변경하는 style kwarg가 있습니다. 자세한 내용은 API 설명서를 참조하세요.
scale 옵션은 mpl 및 latex 렌더러의 출력 크기를 조정합니다.
circuit = QuantumCircuit(1)
for _ in range(10):
circuit.h(0)
# limit line length to 40 characters
circuit.draw(output="text", fold=40)Output:
┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐»
q: ┤ H ├┤ H ├┤ H ├┤ H ├┤ H ├┤ H ├┤ H ├»
└───┘└───┘└───┘└───┘└───┘└───┘└───┘»
« ┌───┐┌───┐┌───┐
«q: ┤ H ├┤ H ├┤ H ├
« └───┘└───┘└───┘
# Change the background color in mpl
style = {"backgroundcolor": "lightgreen"}
circuit.draw(output="mpl", style=style)Output:
# Scale the mpl output to 1/2 the normal size
circuit.draw(output="mpl", scale=0.5)Output:
독립형 회로도 그리기 기능
회로 객체의 메서드가 아닌 독립된 함수로 회로를 그리는 것을 선호하는 애플리케이션이 있는 경우 qiskit.visualization 에서 공개 안정 인터페이스의 일부인 circuit_drawer() 함수를 직접 사용할 수 있습니다. 이 함수는 회로 객체를 필수 인수로 받는다는 점을 제외하면 circuit.draw() 메서드와 동일하게 작동합니다.
from qiskit.visualization import circuit_drawer
circuit_drawer(circuit, output="mpl", plot_barriers=False)Output:
다음 단계
- 그로버 알고리즘 튜토리얼에서 회로 시각화 예시를 확인하세요.
- IBM Quantum Composer 를 사용하여 간단한 회로를 시각화하세요.
- 회로 타이밍을 시각화하십시오.
- Qiskit 시각화 API 문서를 검토하십시오.