क्यूटिप में एक ऑपरेटर के आयाम को परिभाषित करना

Aug 16 2020

मेरा मुख्य प्रश्न: क्या कोई मुझे समझा सकता है कि क्यूपिप में आयाम को परिभाषित करने के लिए सरणी की सूची का उपयोग कैसे किया जाता है?

संदर्भ:

यदि मेरे पास 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]]क़ुतिप में इसका क्या मतलब है?

यदि यह सही है, तो मैं 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))

यह दो क्विट केट राज्यों का टेंसर उत्पाद है, इस प्रकार यह आयाम के एक स्थान में एक वेक्टर है $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)