Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
矩阵和张量理论分析与计算_矩阵张量积,希望能够帮助你!!!。
最近开始使用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 打印电路的矩阵时,默认是输出 高位矩阵直积低位矩阵的结果。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章