使用Qiskit學習量子計算 3基礎語法(上)

2021-10-05 18:22:49 字數 3474 閱讀 3854

qiskit是乙個python庫,是ibm用於開發完成量子計算程式。

安裝qiskit通常需要兩個步驟。第乙個是安裝anaconda,這是乙個python包管理工具,幾乎附帶了需要的所有依賴項。完成此操作後,可以參見這篇文章來安裝qiskit)

from qiskit import

*

# for jupyter notebooks:

%config inlinebackend.figure_format =

'svg'

# makes the images look nice

qiskit的核心物件是量子電路。以下為建立方法,將其稱為qc

qc = quantumcircuit(

)

該電路當前完全為空,沒有量子位,也沒有輸出。

為了減少電路的瑣碎性,我們需要定義乙個量子位暫存器。這是使用quantumregister物件完成的。例如,讓我們定義乙個由兩個量子位組成的暫存器,並將其稱為qr。

qr = quantumregister(2,

'qreg'

)

現在我們可以使用add_register方法將其新增到電路中,並通過檢查qregs電路物件的變數來檢視是否已新增它。

qc.add_register( qr )

qc.qregs

[quantumregister(2,

'qreg'

)]

現在我們的電路具有兩個量子位,我們可以使用電路的另乙個方法來檢視其外觀:draw()。

此時兩個暫存器中的狀態均為 |0⟩

為了對量子態進行操作,需要新增邏輯門

qc.h(

)

如果此時你直接這麼執行,會報錯如下

typeerror                                 traceback (most recent call last)

input-7

-68b196ebf214

>

in--

-->

1 qc.h(

)/usr/local/anaconda3/lib/python3.

7*args,

**kwargs)

106if kwargs:

107 _rename_kwargs(func.__name__, kwargs, kwarg_map)--

>

108return func(

*args,

**kwargs)

109 110

return decorator

typeerror: h(

) missing 1 required positional argument:

'qubit'

這裡我們遇到了乙個錯誤,因為我們沒有告訴該操作的物件是哪個量子位。前面已經定義的暫存器中有兩個qubit 暫存器分別稱為qr[0]和qr[1]。

qc.h(qr[0]

)

此時,在暫存器qr[0]上,我們作用了乙個哈達瑪門h。

qc.cx(qr[0]

, qr[1]

);

可以將此時的電路繪製出來

為了檢視電路的輸出,需要使用特定的「狀態向量模擬器」來執行設計的電路。

如下,使用statevector_simulator模擬器

vector_sim = aer.get_backend(

'statevector_simulator'

)

在qiskit中,後端(backend)指量子程式實際執行時的後台裝置(可以是模擬器或真實的量子計算機)。

指定所需的模擬器名稱,則可通過aer的get_backend() 的方法得到所需的後端物件。上述例子指定的模擬器為』statevector_simulator』。

可以使用以下命令找到aer中所有模擬器的列表

aer.backends(

)

[

'qasm_simulator'

)from aerprovider(

)>

,'statevector_simulator'

)from aerprovider(

)>

,'unitary_simulator'

)from aerprovider(

)>

,'pulse_simulator'

)from aerprovider(

)>

]

所有這些模擬器都是「本地」的,這意味著它們可以在裝有qiskit的計算機上執行。

指定模擬器以後,執行**是由qiskit的execute方法完成的,該方法的引數包含,電路以及指定「後端」(在本例中為模擬器)。

job = execute(qc, vector_sim)
此時產生了乙個處理execute的物件稱為job。接著就是提取運算結果,即提取最終狀態向量。

ket = job.result(

).get_statevector(

)for amplitude in ket:

print

(amplitude)

(

0.7071067811865476+0j

)0j0j(

0.7071067811865475+0j

)

此時的結果代表得到乙個 bell 態

qiskit的另乙個功能是可以用以任意純態初始化電路。

new_qc = quantumcircuit(qr)

new_qc.initialize(ket, qr)

>

下一節將繼續介紹基礎語法(下)

當量子計算遇到機器學習

譯者 蘇本如 出品 csdn id csdnnews 量子計算和機器學習已經成為當今炙手可熱的話題。排除一些明顯的炒作外,這當中也有一些真正的基礎。隨著傳統計算技術的發展,基於機器學習等領域的影象相關分析已經取得了令人難以置信的成果。另一方面,量子物理學一直是乙個令人難解的神秘領域,它引起了數學 以...

亞馬遜雲部門將提供3家科技公司的量子計算

techweb amazon.com inc.的 雲部門周四表示,已啟動一項商業服務,該服務可讓數百萬客戶試用由三家技術公司生產的量子計算平台。此次發布是在與學術機構和包括fidelity investments inc.在內的公司進行了大約八個月的測試之後。amazon braket是amazon...

CGI程式設計學習3 加法計算

現象 在表單中輸入兩個資料.呼叫cgi返回兩個資料相加的和.下面我們看一下 htm部分 html head title cgi test add title head body form action cgi bin demo2.cgi p h1 請輸入兩個資料 input type text na...