การกำหนดมิติของตัวดำเนินการใน qutip

Aug 16 2020

คำถามหลักของฉัน: ใครช่วยอธิบายให้ฉันฟังหน่อยได้ไหมว่ารายการอาร์เรย์ถูกใช้เพื่อกำหนดมิติใน qutip ได้อย่างไร

บริบท:

ถ้าฉันมีตัวดำเนินการความหนาแน่นของฉันเป็นA = Qobj(np.arange(1,65).reshape(8,8))3 qubits ฉันจะใช้การแปลงบางส่วนที่ฉันต้องการทำให้สองส่วนพัวพันระหว่าง qubit 1 กับ qubit 2 และ 3 ได้อย่างไร

ฉันเดาว่าฉันจะต้องกำหนดมาสก์ของฉันเป็นX.dims = [[2,4],[2,4]]และใช้qt.partial_transpose(X, [1,0])การเปลี่ยนตำแหน่งบางส่วนเหนือระบบย่อยที่สอง แต่สิ่งนี้X.dims = [[2,4],[2,4]]หมายความว่าอย่างไรใน qutip?

ถ้าสิ่งนี้ถูกต้องฉันจะกำหนดมิติของฉันสำหรับการพัวพันระหว่าง qubit 1 และ 3 และ qubit 2 ได้อย่างไร

คำตอบ

2 glS Aug 18 2020 at 15:29

จากเอกสารอย่างเป็นทางการ :

Q.dims: ทำรายการติดตามรูปร่างสำหรับส่วนประกอบแต่ละส่วนของระบบหลายส่วน (สำหรับผลิตภัณฑ์เทนเซอร์และการติดตามบางส่วน)

กล่าวอีกนัยหนึ่งคุณสามารถคิดว่ามันเป็นขนาดของ (การแสดงเมทริกซ์ของ) วัตถุที่กำลังพิจารณาโดยคำนึงถึงโครงสร้างแรงดึงของพื้นที่ที่อยู่ข้างใต้ องค์ประกอบแรกบอกคุณเกี่ยวกับจำนวนแถวในขณะที่องค์ประกอบที่สองบอกคุณเกี่ยวกับจำนวนคอลัมน์

พิจารณาเป็นตัวอย่าง

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

นี่คือผลคูณของเทนเซอร์ของสองสถานะ qubit ket ดังนั้นจึงเป็นเวกเตอร์ในช่องว่างของมิติ $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)