Skip to main content
IBM Quantum Platform

회로를 시각화하다

  • 이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 다음 버전 이상을 사용하는 것이 좋습니다.

    qiskit[all]~=2.5.2
    

생성 중인 회로를 보는 것은 종종 유용합니다. 다음 옵션을 사용하여 키스킷 회로를 표시할 수 있습니다.

from qiskit import QuantumCircuit

양자 회로를 그리세요

QuantumCircuit 클래스는 draw() 메서드를 통해 회로를 그리거나 회로 객체를 인쇄하여 회로를 그릴 수 있도록 지원합니다. 기본적으로 둘 다 회로도의 ASCII 아트 버전을 렌더링합니다.

printNone 을 반환하지만 다이어그램을 인쇄하는 부작용이 있는 반면 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" 인수를 문자열 mpllatex 으로 설정하여 이러한 렌더러를 선택합니다.

Tip

OSX 사용자는 mactex 패키 지를 통해 필요한 LaTeX 패키지를 받을 수 있습니다.

# Matplotlib drawing
circuit.draw(output="mpl")

Output:

Output of the previous code cell
# Latex drawing
circuit.draw(output="latex")

Output:

Output of the previous code cell

출력 내용 저장

주피터 노트북에서 대규모 회로를 인라인으로 그리면 속도가 느리거나 판독이 어려울 수 있습니다. 다이어그램을 파일에 직접 저장한 다음 이미지 뷰어에서 열어 필요에 따라 확대할 수 있습니다.

# Save as an image using the Matplotlib drawer
circuit.draw(output="mpl", filename="circuit-mpl.jpeg")

Output:

Output of the previous code cell
# Or save a LaTeX rendering
circuit.draw(output="latex", filename="circuit-latex.pdf")

Output:

Output of the previous code cell

제어 회로도

기본적으로 draw() 메서드는 렌더링된 이미지를 객체로 반환하고 아무것도 출력하지 않습니다. 반환되는 정확한 클래스는 지정된 출력에 따라 다릅니다: 'text' (기본값)은 TextDrawer 객체를 반환하고, 'mpl'matplotlib.Figure 객체를 반환하며, latexPIL.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:

Output of the previous code cell
# Draw the circuit with reversed bit order
circuit.draw(output="mpl", reverse_bits=True)

Output:

Output of the previous code cell
# Draw the circuit without barriers
circuit.draw(output="mpl", plot_barriers=False)

Output:

Output of the previous code cell

렌더러별 맞춤 설정

사용 가능한 일부 사용자 지정 옵션은 렌더러에 따라 다릅니다.

fold 인수는 출력의 최대 너비를 설정합니다. text 렌더러에서는 다음 줄로 래핑되기 전 다이어그램의 줄 길이를 설정합니다. 'mpl' 렌더러를 사용하는 경우 다음 줄로 접히기 전의 (시각적) 레이어 수입니다.

mpl 렌더러에는 색과 윤곽선을 변경하는 style kwarg가 있습니다. 자세한 내용은 API 설명서를 참조하세요.

scale 옵션은 mpllatex 렌더러의 출력 크기를 조정합니다.

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:

Output of the previous code cell
# Scale the mpl output to 1/2 the normal size
circuit.draw(output="mpl", scale=0.5)

Output:

Output of the previous code cell

독립형 회로도 그리기 기능

회로 객체의 메서드가 아닌 독립된 함수로 회로를 그리는 것을 선호하는 애플리케이션이 있는 경우 qiskit.visualization 에서 공개 안정 인터페이스의 일부인 circuit_drawer() 함수를 직접 사용할 수 있습니다. 이 함수는 회로 객체를 필수 인수로 받는다는 점을 제외하면 circuit.draw() 메서드와 동일하게 작동합니다.

from qiskit.visualization import circuit_drawer

circuit_drawer(circuit, output="mpl", plot_barriers=False)

Output:

Output of the previous code cell

다음 단계

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