You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量调用QuTip的coherent_dm函数解决多输入维度不匹配问题

QuTip 批量生成多alpha值相干态密度矩阵的实现方案

报错原因

QuTip 内置 coherent_dm 函数的 alpha 参数仅支持单个标量复数输入,未兼容数组形式的批量传参。直接将100个元素的复数序列作为alpha实参传入时,函数内部按标量输入设计的矩阵构造逻辑会因输入维度超出预期,触发维度不匹配报错。

可行实现方法

方法1:逐值循环遍历(通用适配、无额外依赖)

该方法逻辑直接、兼容性最强,适合小批量计算场景,步骤如下:

  1. 导入依赖并提前生成目标复数序列:
import numpy as np
from qutip import coherent_dm

# 按需求生成c值序列
t = np.linspace(0, 2*np.pi, 100)
c = 2*np.exp(-t*1j) + 0.1*10*(1 - np.exp(-t*1j))
  1. 遍历每个c值,逐次计算对应的相干态密度矩阵,存入结果列表:
# 固定截断维数N=10,初始化结果存储列表
N = 10
dm_results = []
for alpha_scalar in c:
    dm = coherent_dm(N=N, alpha=alpha_scalar, offset=0, method='operator')
    dm_results.append(dm)

最终得到的dm_results长度为100,每个元素对应一个c值生成的Qobj类型密度矩阵,和预期输出完全匹配。也可以用列表推导式简化循环写法,效果完全一致:

dm_results = [coherent_dm(N=10, alpha=alpha_val, offset=0, method='operator') for alpha_val in c]

方法2:向量化预计算(适合大规模c序列加速)

如果后续c序列规模扩大到数千、上万个值,纯Python循环的函数调用开销会明显拖慢计算速度,可基于相干态密度矩阵的解析公式做向量化批量计算,一次性生成所有矩阵元素:

相干态密度矩阵的矩阵元存在解析关系:<i|rho_alpha|j> = exp(-|α|²) * α^i * (α*)^j / sqrt(i! * j!),不依赖QuTip内部的逐次算符运算即可批量计算。

  1. 提前预计算固定截断维数N下的所有阶乘项,构造适配所有c值的张量存储矩阵元:
import numpy as np
from qutip import Qobj
import math

t = np.linspace(0, 2*np.pi, 100)
c = 2*np.exp(-t*1j) + 0.1*10*(1 - np.exp(-t*1j))
N = 10
n_c = len(c)
# 初始化复数张量,形状为(100, N, N),对应100个N*N维密度矩阵
dm_tensor = np.zeros((n_c, N, N), dtype=np.complex128)

# 预计算阶乘值避免重复计算
factorials = [math.factorial(i) for i in range(N)]
abs_c_sq = np.abs(c)**2
c_conj = np.conj(c)

# 向量化计算所有矩阵元
for i in range(N):
    for j in range(N):
        dm_tensor[:, i, j] = np.exp(-abs_c_sq) * (c**i) * (c_conj**j) / np.sqrt(factorials[i] * factorials[j])

# 将numpy张量转回QuTip支持的Qobj格式列表
dm_results = [Qobj(dm_tensor[k]) for k in range(n_c)]

该方法的计算效率比逐次循环调用coherent_dm高1~2个数量级,适合大规模参数扫描类任务。

内容的提问来源于stack exchange,提问作者Bruno Piveta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 02:36:04