最近開始使用pyqpanda答題,之前一直用qiskit搭電路,初上手pyqpanda 還是有些不适應。
開始入手,本帖驗證下門電路的矩陣表示以及多門多線路的矩陣表達。(完全是為了印證下數學概念的表達,沒什麼高深的東西)
from pyqpanda import *
init(QMachineType.CPU)
qbits = qAlloc_many(2)
prog = QProg()
prog << X(qbits[0])
prog << Z(qbits[1])
mat = np.array(get_matrix(prog,True)).reshape(4,4)
print(mat)
print(draw_qprog(prog))
輸出如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLlJzYkhTZzEDNygTOiZjZ4IDNyQzYhRjNmdzYiFGOzY2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
同樣用X,Z門各自的幺正矩陣湊出來如下:
def get_matrix_gate(gate):
init(QMachineType.CPU)
qbits = qAlloc_many(1)
prog = QProg()
prog<<gate(qbits[0])
mat = np.array(get_matrix(prog,True)).reshape(2,2)
return np.mat(mat)
X_mat = get_matrix_gate(X)
print(X_mat)
Z_mat = get_matrix_gate(Z)
print(Z_mat)
print('Tensor product of two gate')
two_qbits_matrix = np.kron(Z_mat,X_mat)
print(two_qbits_matrix)
輸出如下:
張量積的矩陣與兩個量子比特位的線路矩陣相同,說明:
在pyqpanda 中,
1)索引值高的量子比特位是高位,np.kron(高位門矩陣,低位門矩陣)
2)get_matrix(prog,True) api的第二個參數True表示大小端,在輸出矩陣時,尤其是線路矩陣時,!!必須!!,強調下,必須指定為True,否則輸出的高低位順序是反的。然而pyqpanda.get_matrix()中預設是False,這樣輸出的矩陣對應: 低位矩陣 kron 高位矩陣,如果直接與态矢量(4 by 1)相乘會出錯!
比如,預設調用 get_matrix 口:
from pyqpanda import *
init(QMachineType.CPU)
qbits = qAlloc_many(2)
prog = QProg()
prog << X(qbits[0])
prog << Z(qbits[1])
mat = np.array(get_matrix(prog)).reshape(4,4)
print(draw_qprog(prog))
print('Two qbits circuit matrix: ')
print(mat)
print('Tensor product of two gate (X_mat )')
two_qbits_matrix = np.kron(X_mat,Z_mat)
print(two_qbits_matrix)
輸出:
初步使用pyqpanda時,發現這個小的不便之處。
之前使用qiskit 列印電路的矩陣時,預設是輸出 高位矩陣直積低位矩陣的結果。