큐팁에서 연산자의 차원 정의
내 주요 질문 : 누군가 배열 목록을 사용하여 qutip에서 차원을 정의하는 방법을 설명해 주시겠습니까?
문맥:
A = Qobj(np.arange(1,65).reshape(8,8))
3 큐 비트의 밀도 연산자가있는 경우 큐 비트 1과 큐 비트 2와 3 사이의 이분 얽힘을 만들기 위해 부분 전치를 어떻게 수행합니까?
나는 내 마스크를 정의 하고 두 번째 하위 시스템에 대한 부분 전치를 X.dims = [[2,4],[2,4]]
취해야 할 것이라고 생각합니다 qt.partial_transpose(X, [1,0])
. 그러나 이것이 X.dims = [[2,4],[2,4]]
큐팁에서 무엇을 의미합니까?
이것이 맞다면 큐 비트 1과 3과 큐 비트 2 사이의 얽힘에 대한 차원을 어떻게 정의할까요?
답변
로부터 공식 문서 :
Q.dims
: 다중 부분 시스템의 개별 구성 요소에 대한 모양을 추적하는 목록 (텐서 제품 및 부분 트레이스의 경우).
즉, 기본 공간의 천체 구조를 고려하여 고려중인 대상의 (매트릭스 표현) 차원으로 생각할 수 있습니다. 첫 번째 요소는 행 수를 알려주고 두 번째 요소는 열 수를 알려줍니다.
예를 들어 고려
fooQ = qutip.tensor(qutip.basis(2, 0), qutip.basis(2, 1))
이것은 두 큐 비트 켓 상태의 텐서 곱이므로 차원 공간의 벡터입니다. $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)