簡體   English   中英

如何將 2d numpy.array 或 Qobj 重塑為 dims=[[2,2],[2,2]]

[英]How to reshape a 2d numpy.array or Qobj into dims=[[2,2],[2,2]]

下面的 Numpy 示例


目標:QuTiP 對象

我的請求的目標是添加兩個Qobj (密度矩陣)類型的量子狀態對象,如下面的 Werner 狀態示例(賦予它一些物理意義)。

import qutip as q
r = .5
state = r * q.ket2dm(q.ghz_state(2)) + (1-r) * q.maximally_mixed_dm(4)

錯誤信息是

TypeError: Incompatible quantum object dimensions

因此,我們可以進入較低維度的狀態,但隨后我們會失去相關的維度屬性以繼續該狀態:

state = r * q.ket2dm(q.ghz_state(2)).data.toarray() + (1-r) * q.maximally_mixed_dm(4)

我的嘗試像q.Qobj(q.maximally_mixed_dm(4).data.toarray().reshape([[2,2],[2,2]]))都失敗了,因為 reshape 不處理列表列表。

從維度[[2,2],[2,2]]向下到[4,4]的逆過程並不是使用 reshape 的奇跡,也不是如轉換為數組所示。 但是在 numpy 或 qutip 中是否實現了逆向?


編輯:對於熟悉 numpy 的人

你如何將一個二維數組(例如這里的 4x4)重塑為一個 (2x2)x(2x2) 數組? numpy 的內置函數似乎不喜歡我請求的示例。 它不接受如下所示的列表列表:

import numpy as np
state = np.identity(4).reshape([[2,2],[2,2]])

我很驚訝以前沒有人問過這個問題!

在將此答案應用於 qutip 時,Jojo 的答案是不完整的。

Qutip 特定問題

關於 qutip 的令人困惑的部分是它需要 (4,4) 的形狀,但量子維度是[[2,2],[2,2]] 這會導致錯誤消息,例如形狀正確,量子維度錯誤:

>>> import qutip as q
>>> s1 = q.ket2dm(q.ghz_state(2))
>>> s2 = q.maximally_mixed_dm(4).data.toarray().reshape((4,4))
>>> s1+s2

TypeError: Incompatible quantum object dimensions

或者如果接受了量子維度,則內部形狀是錯誤的:

>>> import qutip as q
>>> s1 = q.ket2dm(q.ghz_state(2))
>>> s2 = q.maximally_mixed_dm(4).data.toarray().reshape((2,2,2,2))
>>> s1+s2

TypeError: expected dimension <= 2 array or matrix

Qutip 特定轉換

解決方案是將正確的形狀 (4,4) 重新轉換為正確的量子維度[[2,2],[2,2]]

s2 = q.Qobj(q.maximally_mixed_dm(4).data.toarray().reshape((4,4)),
            dims=[[2,2],[2,2]])

不幸的是,我目前在 qutip 中沒有看到這樣的實現,但是這種通過 numpy 的“解決方法”有效。

您以錯誤的方式使用重塑。 它需要一個維度元組作為參數(參見文檔),而不是一個元組元組或以維度為元素的列表列表 - 這應該如何工作? 我認為您正在將列表列表的深度與維度(預計將是元組的數字條目)混合在一起。

我不確定你到底想要什么,但我猜是以下之一:

state = np.identity(4).reshape((2,2,2,2))
state = np.identity(4).reshape((4,2,2))
state = np.identity(4).reshape((2,2,4))

您可以直接使用 dims 屬性設置尺寸:

s2 = q.maximally_mixed_dm(4)
s2.dims = [[2,2],[2,2]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM