qutipでの演算子の次元の定義

Aug 16 2020

私の主な質問:配列のリストを使用してqutipの次元を定義する方法を誰かに説明してもらえますか?

環境:

A = Qobj(np.arange(1,65).reshape(8,8))3キュービットの密度演算子がある場合、キュービット1とキュービット2および3の間に2部エンタングルメントを作成するように部分転置を行うにはどうすればよいですか?

私は自分のマスクを次のように定義し、2番目のサブシステム上で部分的に転置X.dims = [[2,4],[2,4]]するqt.partial_transpose(X, [1,0])ものを取る必要があると推測しています。しかし、これX.dims = [[2,4],[2,4]]はqutipではどういう意味ですか?

これが正しければ、キュービット1と3とキュービット2の間のエンタングルメントの次元をどのように定義しますか?

回答

2 glS Aug 18 2020 at 15:29

公式ドキュメントから:

Q.dims:マルチパートシステムの個々のコンポーネントの形状を追跡するリスト(テンソル積および部分トレースの場合)。

言い換えれば、基礎となる空間のテンソル構造を考慮に入れて、検討中のオブジェクト(の行列表現)の次元と考えることができます。最初の要素は行数を示し、2番目の要素は列数を示します。

例として考えてみましょう

fooQ = qutip.tensor(qutip.basis(2, 0), qutip.basis(2, 1))

これは2つのキュービットケット状態のテンソル積であるため、次元空間内のベクトルです。 $2\times 2$。行列として、あなたはそれをとして表すことができます$4\times 1$マトリックス。ただし、この空間のテンソル構造を覚えておきたい場合は、部分トレースなどを簡単に実行できるため、個々の次元を格納することをお勧めします。その後fooQ.dims == [[2, 2], [1, 1]]、次のようになります。$2\times 2$ 行、および $1=1\times 1$ カラム。

あなたの例で[[2, 4], [2, 4]]は、は空間内の密度行列を表します$\mathcal H_1\otimes\mathcal H_2$$\dim\mathcal H_1=2$ そして $\dim\mathcal H_2=4$

たとえば、次のようにして、スペースの全体的な寸法を取得できます。

number_of_rows = np.prod(fooQ.dims[0])
number_of_cols = np.prod(fooQ.dims[1])

または、寸法を「解明」して、個々のコンポーネントスペースの寸法のリストを取得することもできます。

unravelled_dimensions = np.transpose(fooQ.dims)