Shortcuts

참고

이 페이지는 tutorials/circuits/2_plotting_data_in_qiskit.ipynb 에서 생성되었다.

IBM 퀀텀 랩 에서 대화식으로 실행하시오.

키스킷 시각화하기

[1]:
from qiskit import *
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor

히스토그램 그리기

실제 장치 또는 qasm_simulator 에서 실행되는 양자 회로의 데이터를 가시화하기 위해서 간단한 함수를 만들었다.

plot_histogram(data)

예를 들어 2-큐비트 벨 (Bell) 상태를 만든다.

[2]:
# quantum circuit to make a Bell state
bell = QuantumCircuit(2, 2)
bell.h(0)
bell.cx(0, 1)

meas = QuantumCircuit(2, 2)
meas.measure([0,1], [0,1])

# execute the quantum circuit
backend = BasicAer.get_backend('qasm_simulator') # the device to run on
circ = bell + meas
result = execute(circ, backend, shots=1000).result()
counts  = result.get_counts(circ)
print(counts)
{'00': 528, '11': 472}
[3]:
plot_histogram(counts)
[3]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_4_0.png

히스토그램 그래프 옵션

plot_histogram() 은 출력 그래프를 조정하는 몇 가지 옵션을 가지고 있다. 첫 번째 옵션은 legend kwarg(역주: keyword argument, 키워드 인자) 이다. 이 옵션은 실행에 대한 레이블을 제공하는데 사용된다. 이는 각 실행의 결과에 레이블을 다는데 사용되는 문자열의 목록을 취한다. 이는 보통 하나의 히스토그램에 여러 개의 실행 결과를 그릴 때 유용하게 사용된다. sort kwarg는 히스토그램의 막대들이 그려지는 순서를 조정할 때 사용된다. asc 로 증가되는 순서를 명시하거나, dsc 로 감소되는 순서를 명시할 수 있다. number_to_keep kwarg는 보여줄 단어의 수를 나타내는 정수를 취하고, 이 숫자 외의 나머지는 나머지(rest) 로 명시되는 하나의 막대로 그룹지어진다. color kwarg는 각 실행에 대한 막대의 색을 명시하기 위해서 색을 명시하는 문자열이나 문자열 목록을 전달할 수 있다. bar_labels kwarg로 레이블이 막대의 위에 나타날지 여부를 조정할 수 있다. 마지막 옵션은 figsize kwarg는 출력 그림을 만들기 위해 크기의 쌍을 인치(inch) 단위로 나타낸다.

[4]:
# Execute 2-qubit Bell state again
second_result = execute(circ, backend, shots=1000).result()
second_counts  = second_result.get_counts(circ)
# Plot results with legend
legend = ['First execution', 'Second execution']
plot_histogram([counts, second_counts], legend=legend)
[4]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_6_0.png
[5]:
plot_histogram([counts, second_counts], legend=legend, sort='desc', figsize=(15,12),
               color=['orange', 'black'], bar_labels=False)
[5]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_7_0.png

Plot_histogram() 에서 출력된 시각화 사용하기

plot_histogram() 함수를 사용할 때 표현된 가시화에 대해서 matplotlib.Figure 을 반환한다. 주피터 노트북은 이 반환 형식을 이해하고, 노트북에서 볼 수 있도록 출력을 하지만, 주피터 외부에서 실행할 때는 자동적으로 출력되지는 않는다. (설정된 matplotlib 후위 처리 장치가 쌍방향적이라 가정하면) 새로운 창에 이미지를 나타내기 위해서는 plot_histogram() 에서 반환되는 객체에 .show() 을 호출할 수 있다. 다른 방법으로는 .savefig('out.png') 을 호출하여 그림을 out.png 으로 저장할 수 있다. savefig() 메소드는 출력 위치를 입력으로 받고, 사용자가 원하는 위치와 파일 이름을 조정할 수 있다.

상태 그리기

많은 경우에 양자 컴퓨터의 상태를 확인하길 원할 것이다. 디버깅을 위한 확인이 될 수 있다. 에를들어 시뮬레이션을 하거나 단층 촬영(state tomography) 의 상태를 가지고 있고, 그 양자 상태를 시각화하는 것이라고 가정해보자. 이 경우에는 많은 양의 연산이 필요하다, 따라서 작은 양자 시스템의 상태만을 보기를 권한다. 양자 상태를 다른 형태로 시각화하는 여러 함수가 존재한다.

plot_state_city(quantum_state)
plot_state_qsphere(quantum_state)
plot_state_paulivec(quantum_state)
plot_state_hinton(quantum_state)
plot_bloch_multivector(quantum_state)

양자 상태는 상태 행렬 \(\rho\) (에르미트 행렬) 이나 상태벡터 \(|\psi\rangle\) (복소 벡터) 중에 하나이다. 상태 행렬은 다음으로 상태벡터와 관련이 된다.

\[\rho = |\psi\rangle\langle \psi|,\]

그리고 일반적인 혼합 상태(mixed states) 도 (상태벡터의 양의 합으로) 나타낼 수 있다.

\[\rho = \sum_k p_k |\psi_k\rangle\langle \psi_k |.\]

함수에 의해 시각화할 수 있는 것은 다음과 같다.

  • 'plot_state_city': 상태 행렬의 실수와 허수 (imag) 부분이 도시의 건물과 같은 형태로 그려지는 양자 상태를 나타내는 표준적인 시각화.

  • 'plot_state_qsphere': 상태 벡터의 진폭과 위상이 구체에 그려지는 양자 상태로 키스킷에 특화된 시각화다. 진폭은 화살표의 굵기이며, 위상은 색으로 나타난다. 혼합된 상태에 대해서는 각 컴포넌트에 대해서 다른 'qsphere' 를 보여줄 것이다.

  • 'plot_state_paulivec': \(\rho=\sum_{q=0}^{d^2-1}p_jP_j/d\) 기저를 파울리 (Pauli) 연산자로 사용하는 상태 행렬을 나타낸다.

  • 'plot_state_hinton': 'city' 형태로 나타내는 것은 동일하지만, 요소의 크기는 행렬 요소의 값을 나타낸다.

  • 'plot_bloch_multivector': 양자 상태를 하나의 큐비트 공간에 투영하고, 블로흐 구체에 시각화 한다.

[6]:
from qiskit.visualization import plot_state_city, plot_bloch_multivector
from qiskit.visualization import plot_state_paulivec, plot_state_hinton
from qiskit.visualization import plot_state_qsphere
[7]:
# execute the quantum circuit
backend = BasicAer.get_backend('statevector_simulator') # the device to run on
result = execute(bell, backend).result()
psi  = result.get_statevector(bell)
[8]:
plot_state_city(psi)
[8]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_13_0.png
[9]:
plot_state_hinton(psi)
[9]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_14_0.png
[10]:
plot_state_qsphere(psi)
[10]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_15_0.png
[11]:
plot_state_paulivec(psi)
[11]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_16_0.png
[12]:
plot_bloch_multivector(psi)
[12]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_17_0.png

여기서는 모든 벡터가 0이기 때문에 하나의 큐비트 공간에서 양자 상태에 대해서 정보가 없는 것을 확인한다.

상태 그리기 함수를 이용할때 옵션

양자 상태를 시각화하는 여러 함수는 그래프가 그려지는 방법을 조율하는 여러 옵션을 제공한다. 사용할 수있는 옵션은 사용중인 함수에 따라 다르다.

plot_state_city() 옵션

  • title (str): 그림 제목을 나타내는 문자열

  • figsize (tuple): 인치로 나타낸 그림 크기 (넓이, 높이).

  • color (list): 구성 요소의 실수와 허수 부분에 대한 색을 나타내는 길이=2의 목록.

[13]:
plot_state_city(psi, title="My City", color=['black', 'orange'])
[13]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_21_0.png

plot_state_hinton() 옵션

  • title (str): 그림 제목을 나타내는 문자열

  • figsize (tuple): 인치로 나타낸 그림 크기 (넓이, 높이).

[14]:
plot_state_hinton(psi, title="My Hinton")
[14]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_23_0.png

plot_state_paulivec() 옵션

  • title (str): 그림 제목을 나타내는 문자열

  • figsize (tuple): 인치로 나타낸 그림 크기 (넓이, 높이).

  • color (list 또는 str): 기대 값의 막대의 색.

[15]:
plot_state_paulivec(psi, title="My Paulivec", color=['purple', 'orange', 'green'])
[15]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_25_0.png

plot_state_qsphere() 옵션

  • figsize (tuple): 인치로 나타낸 그림 크기 (넓이, 높이).

plot_bloch_multivector() 옵션

  • title (str): 그림 제목을 나타내는 문자열

  • figsize (tuple): 인치로 나타낸 그림 크기 (넓이, 높이).

[16]:
plot_bloch_multivector(psi, title="My Bloch Spheres")
[16]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_28_0.png

양자 상태를 그리는 함수의 출력 사용하기

우리가 양자 상태를 그리는 함수를 사용할 때, 그려진 시각화의 결과로 matplotlib.Figure``를 반환한다. 주피터 노트북은 반환 형식을 이해하고, 노트북에 자동으로 그린다(렌더링). 하지만 주피터 외부에서 구동할 때는 기능이 자동으로 실행되지는 않는다. 그러나 ``matplotlib.Figure 클래스는 시각화를 출력하고 저장하는 메서드/함수들을 가지고 있다. 새로운 창에 이미지를 나타내기 위해서 .show() 을 이용하여 호출할 수 있다 (설정된 matplotlib 처리 장치가 쌍방향적일때 가능). 다른 방법으로는 .savefig('out.png') 을 호출하여 그림을 out.png 으로 현재 작업중인 디렉토리에 저장할 수 있다. savefig() 메소드는 출력 위치를 입력으로 받고, 사용자가 원하는 위치와 파일 이름을 조정할 수 있다.

주피터 노트북 용 상호작용하는 상태 그래프

plot_histogram() 와 같이 양자 상태를 그리기 위한 다른 함수 집합이 있다. 이런 함수는 동일한 이름을 가지지만, i 를 접두어로 가진다:

iplot_state_city(quantum_state)
iplot_state_paulivec(quantum_state)
iplot_state_qsphere(quantum_state)
iplot_state_hinton(quantum_state)
iplot_bloch_multivector(quantum_state)

이런 함수들은 주피터 노트북에 사용되기 위해 외부에서 호스팅되는 JS 라이브러리를 사용하여 만들어진다. 인터랙티브 그래프는 주피터 노트북 내에서 구동되고, JS 라이브러리를 가진 외부 호스트에 연결이 있을 때에만 사용될 수 있다. 주피터 노트북 외부에서 이 함수들을 사용하면 실패할 것이다.

[17]:
from qiskit.tools.visualization import iplot_state_paulivec
[18]:
# Generate an interactive pauli vector plot
iplot_state_paulivec(psi)

블로흐(Bloch) 벡터 그리기

양자 시스템을 그리는 표준적인 방법은 블로흐 (Bloch) 벡터를 사용하는 것이다. 이는 하나의 큐비트에 대해서만 동작하고, 블로흐 벡터를 입력으로 받는다.

블로흐 벡터는 \([x = \mathrm{Tr}[X \rho], y = \mathrm{Tr}[Y \rho], z = \mathrm{Tr}[Z \rho]]\) 로 정의되고, 여기서 \(X\), \(Y\), \(Z\) 는 하나의 큐비트에 대한 파울리 (Pauli) 연산자이고, \(\rho\) 는 상태 행렬이다.

[19]:
from qiskit.visualization import plot_bloch_vector
[20]:
plot_bloch_vector([0,1,0])
[20]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_35_0.png

plot_bloch_vector() 의 옵션들

  • title (str): 그림 제목을 나타내는 문자열

  • figsize (tuple): 인치로 나타낸 그림 크기 (너비, 높이).

[21]:
plot_bloch_vector([0,1,0], title='My Bloch Sphere')
[21]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_37_0.png

plot_bloch_vector() 에서의 output 조정하기

plot_bloch_vector 함수를 사용할 때, 그려진 시각화의 결과로 matplotlib.Figure 를 반환한다. 주피터 노트북은 반환 형식을 이해하고, 노트북에 자동으로 그린다. 하지만 주피터 외부에서 구동할 때는 이 기능이 자동으로 실행되지는 않는다. 그러나 matplotlib.Figure 클래스에는 시각화를 출력하고 저장하는 메서드 함수들이 있다. 새로운 창에 이미지를 나타내기 위해서 .show() 을 이용하여 호출할 수 있다 (설정된 matplotlib 처리 장치가 쌍방향적일때 가능). 다른 방법으로는 .savefig('out.png') 을 호출하여 그림을 out.png 으로 현재 작업중인 디렉토리에 저장할 수 있다. savefig() 메소드는 출력 위치를 입력으로 받고, 사용자가 원하는 위치와 파일 이름을 조정할 수 있다.

[22]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright

Version Information

Qiskit SoftwareVersion
QiskitNone
Terra0.14.0
Aer0.6.0
IgnisNone
AquaNone
IBM Q Provider0.6.1
System information
Python3.7.7 (default, Mar 26 2020, 10:32:53) [Clang 4.0.1 (tags/RELEASE_401/final)]
OSDarwin
CPUs4
Memory (Gb)16.0
Mon Apr 27 21:46:41 2020 EDT

This code is a part of Qiskit

© Copyright IBM 2017, 2020.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

[ ]:

당신은 다음 언어로 문서를 보고 있다 lang: Korean
언어
English
Japanese
German
Korean