การกำหนดมิติของตัวดำเนินการใน qutip
คำถามหลักของฉัน: ใครช่วยอธิบายให้ฉันฟังหน่อยได้ไหมว่ารายการอาร์เรย์ถูกใช้เพื่อกำหนดมิติใน 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 ได้อย่างไร
คำตอบ
จากเอกสารอย่างเป็นทางการ :
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)