最近开始使用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))
输出如下:

同样用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 打印电路的矩阵时,默认是输出 高位矩阵直积低位矩阵的结果。
本文介绍了使用PyQPanda进行量子门操作,并通过实例验证了门电路的矩阵表示,特别是多门多线路的矩阵表达。作者指出在PyQPanda中,量子比特的高位在前,且get_matrix函数默认输出的矩阵顺序可能与期望相反,需要设置参数为True来获取正确的高位在前的矩阵。同时,对比了PyQPanda与qiskit在矩阵表示上的差异,强调了理解矩阵顺序的重要性。
1360

被折叠的 条评论
为什么被折叠?



