Python 3.x 在qutip中实现基于零的Qobj和基于sigma的Qobj的简单方法

Python 3.x 在qutip中实现基于零的Qobj和基于sigma的Qobj的简单方法,python-3.x,qutip,Python 3.x,Qutip,我是qutip的新手,我正在努力以一种非常聪明的方式创建具有这种形状的量子对象: from qutip import * object1 = Qobj([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]) object2 = Qobj([[0, 0, 0, -1j], [0, 0, 1j, 0],

我是qutip的新手,我正在努力以一种非常聪明的方式创建具有这种形状的量子对象:

from qutip import *
object1 = Qobj([[1, 0, 0, 0],
               [0, -1, 0, 0],
               [0, 0, 0, 0],
               [0, 0, 0, 0])

object2 = Qobj([[0, 0, 0, -1j],
               [0, 0, 1j, 0],
               [0, 0, 0, 0],
               [0, 0, 0, 0])
等等

我们的想法是这样做的所有西格玛子矩阵自由如何建立一个更好的方式使用西格玛2x2矩阵。 有没有更好的办法? 真诚地
Paul

首先,QuTiP具有
sigmax
sigmay
sigmaz
运算符,请参阅。为了达到您想要的效果,您可以将西格玛矩阵的张量积与在您希望插入西格玛矩阵的位置具有1的矩阵进行比较:

import numpy as np
import qutip as qt

def one_at(pos=(0,0), N=2):
    arr = np.zeros((N, N))
    arr[pos] = 1
    return qt.Qobj(arr)

>>> one_at((0,0))
Qobj data =
[[1. 0.]
 [0. 0.]]

>>> one_at((0,1))
Qobj data =
[[0. 1.]
 [0. 0.]]

>>> qt.sigmay()
Qobj data =
[[0.+0.j 0.-1.j]
 [0.+1.j 0.+0.j]]

>>> qt.sigmaz()
Qobj data =
[[ 1.  0.]
 [ 0. -1.]]

>>> qt.tensor(one_at((0,0)), qt.sigmaz())
Qobj data =
[[ 1.  0.  0.  0.]
 [ 0. -1.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]]

>>> qt.tensor(one_at((0,1)), qt.sigmay())
Qobj data =
[[0.+0.j 0.+0.j 0.+0.j 0.-1.j]
 [0.+0.j 0.+0.j 0.+1.j 0.+0.j]
 [0.+0.j 0.+0.j 0.+0.j 0.+0.j]
 [0.+0.j 0.+0.j 0.+0.j 0.+0.j]]