如何重塑二维数字阵列或将Qobj转换为dims=[[2,2],[2,2]]

2024-04-29 11:25:24 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的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)

错误消息是

^{pr2}$

因此,我们可以进入低维状态,但随后我们松开了相关的维度属性来继续进行状态:

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]]))都失败了,因为整形不处理列表列表。在

从维数[[2,2],[2,2]]向下到[4,4]的逆运算并不是使用整形的奇迹,也不是通过转换到数组所显示的奇迹。 但是,相反的方法是在numpy或qutip中实现的吗?在


编辑:为熟悉纽比的人准备的

如何将二维阵列(例如这里的4x4)重塑为(2x2)x(2x2)的阵列? numpy的内置函数似乎不喜欢我请求的示例。 它不接受如下所示的列表:

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

我很惊讶从来没有人问过这个问题!在


Tags: 对象importnumpy示例目标列表状态as
2条回答

您使用“重塑”的方式不正确。它以维度的元组作为参数(参见文档),而不是元组的元组或以维度为元素的列表列表-这应该如何工作?我认为你把列表的深度和维度(它应该是元组的数字项)混合在一起。在

我不知道你到底想得到什么,但我想是以下其中之一:

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))

当涉及到将这个答案应用于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

或者,如果量子维度被接受,内部形状是错误的:

^{pr2}$

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的“变通方法”有效。在

相关问题 更多 >