从量子比特密度矩阵转换为 Bloch 向量
Convert from qubit density matrix to Bloch vector
给定一个量子比特的 2x2 密度矩阵,我如何计算 Bloch sphere 上代表该量子比特的点?
例如,状态 |0⟩-|1⟩
的密度矩阵为 [[0.5,-0.5],[-0.5,0.5]]
,应该沿 X 轴结束。但是密度矩阵 [[0.5, 0], [0, 0.5]]
没有偏向任何方向,应该在原点结束。
转换取决于几个任意选择:
- 你想要|0⟩在顶部还是底部?
- 坐标系是右手还是左手?
假设你用 "at the bottom" 和 "right-handed" 回答那些问题,那么这个方法就可以做到:
def toBloch(matrix):
[[a, b], [c, d]] = matrix
x = complex(c + b).real
y = complex(c - b).imag
z = complex(d - a).real
return x, y, z
您可以通过选择要否定的输出来切换到其他选择。
正在测试:
print(toBloch([[1, 0],
[0, 0]])) #Off, Z=-1
# (0.0, 0.0, -1.0)
print(toBloch([[0, 0],
[0, 1]])) #On, Z=+1
# (0.0, 0.0, 1.0)
print(toBloch([[0.5, 0.5],
[0.5, 0.5]])) #On+Off, X=-1
# (-1.0, 0.0, 0.0)
print(toBloch([[0.5, 0.5j],
[-0.5j, 0.5]])) #On+iOff, Y=-1
# (0.0, -1.0, 0.0)
print(toBloch([[0.5, 0.0],
[0.0, 0.5]])) #maximally mixed state, X=Y=Z=0
# (0.0, 0.0, 0.0)
给定一个量子比特的 2x2 密度矩阵,我如何计算 Bloch sphere 上代表该量子比特的点?
例如,状态 |0⟩-|1⟩
的密度矩阵为 [[0.5,-0.5],[-0.5,0.5]]
,应该沿 X 轴结束。但是密度矩阵 [[0.5, 0], [0, 0.5]]
没有偏向任何方向,应该在原点结束。
转换取决于几个任意选择:
- 你想要|0⟩在顶部还是底部?
- 坐标系是右手还是左手?
假设你用 "at the bottom" 和 "right-handed" 回答那些问题,那么这个方法就可以做到:
def toBloch(matrix):
[[a, b], [c, d]] = matrix
x = complex(c + b).real
y = complex(c - b).imag
z = complex(d - a).real
return x, y, z
您可以通过选择要否定的输出来切换到其他选择。
正在测试:
print(toBloch([[1, 0],
[0, 0]])) #Off, Z=-1
# (0.0, 0.0, -1.0)
print(toBloch([[0, 0],
[0, 1]])) #On, Z=+1
# (0.0, 0.0, 1.0)
print(toBloch([[0.5, 0.5],
[0.5, 0.5]])) #On+Off, X=-1
# (-1.0, 0.0, 0.0)
print(toBloch([[0.5, 0.5j],
[-0.5j, 0.5]])) #On+iOff, Y=-1
# (0.0, -1.0, 0.0)
print(toBloch([[0.5, 0.0],
[0.0, 0.5]])) #maximally mixed state, X=Y=Z=0
# (0.0, 0.0, 0.0)