【问题标题】:How to reshape a 2d numpy.array or Qobj into dims=[[2,2],[2,2]]如何将 2d numpy.array 或 Qobj 重塑为 dims=[[2,2],[2,2]]
【发布时间】:2018-09-13 15:28:00
【问题描述】:

下面的 Numpy 示例


目标:QuTiP 对象

我的请求的目标是添加两个类型为Qobj(密度矩阵)的量子态对象,如下面的维尔纳状态示例(赋予它一些物理意义)。

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] 的逆向不是使用整形或转换为数组所显示的奇迹。 但是在 numpy 和 qutip 中是否实现了逆向?


编辑:对于熟悉 numpy 的人

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

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

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

【问题讨论】:

  • [[2,2],[2,2]] 的形状如何?和[2, 2, 2, 2]有什么区别?

标签: python reshape qutip


【解决方案1】:

在将这个答案应用于 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 的“解决方法”有效。

【讨论】:

    【解决方案2】:

    您以错误的方式使用 reshape。它需要一个维度的元组作为参数(参见文档),而不是一个元组的元组或以维度作为元素的列表列表 - 那应该如何工作?我认为您将列表列表的深度与维度(预计是元组的数字条目)混合在一起。

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

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

    【讨论】:

      【解决方案3】:

      您可以直接使用 dims 属性设置尺寸:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-09
        • 2016-07-25
        • 1970-01-01
        相关资源
        最近更新 更多