pyqpanda中的线路矩阵与科罗内克张量积的验证

最近开始使用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 打印电路的矩阵时,默认是输出 高位矩阵直积低位矩阵的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenxin0215

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值