我可以把qiskit中的字节顺序从小端转换为大端吗?

6

在文献中常见的CNOT门的常规矩阵表示如下:

CNOT =

      \begin{bmatrix}
      
      1 & 0 &  0 & 0\\
      0 & 1 &  0 & 0\\
      0 & 0 &  0 & 1\\
      0 & 0 &  1 & 0
      
      \end{bmatrix} 
      

然而在Qiskit中,该矩阵被表示为 CNOT =

      \begin{bmatrix}

      1  & 0 &  0 &  0\\
      0  & 0 &  0 &  1\\
      0  & 0 &  1 &  0\\
      0  & 1 &  0 &  0

      \end{bmatrix}

这与大端/小端问题有关吗?是否有一种方法可以以与文献中恢复的方式相同的方式表示我的矩阵?


我认为这个问题应该在量子计算堆栈交换上提问,因为我刚刚意识到SO不支持LaTeX。 - Rajesh Swarnkar
1个回答

7

是的,正如你所提到的,这与Qiskit中的小端比特顺序有关。大多数教科书(和你展示的第一矩阵)都是按照大端序排列的。

如果您想了解更多信息,可以查看以下帖子/文档:

如果您想将Qiskit电路转换为大端格式,只需使用reverse_bits方法即可:
from qiskit import QuantumCircuit
from qiskit.quantum_info import Operator

circuit = QuantumCircuit(2)
circuit.cx(0, 1)

print('Little endian:')
print(Operator(circuit))

print('Big endian:')
print(Operator(circuit.reverse_bits()))

给出:

Little endian:
Operator([[1.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
          [0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j],
          [0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j],
          [0.+0.j, 1.+0.j, 0.+0.j, 0.+0.j]],
         input_dims=(2, 2), output_dims=(2, 2))
Big endian:
Operator([[1.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
          [0.+0.j, 1.+0.j, 0.+0.j, 0.+0.j],
          [0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j],
          [0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j]],
         input_dims=(2, 2), output_dims=(2, 2))

谢谢,我刚意识到字节序也适用于矩阵(门操作符)。感谢您的代码片段。 - Rajesh Swarnkar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接