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

如何创建可按值与索引调用的Fock态向量字典/列表

生成Fock态向量列表的问题

我需要创建名为Fock_states的字典或列表,存储不同的Fock态向量。这些向量由索引j(对应频率数组ω = np.array([ω₀, ω₁, ω₂])中的ω_j)和Fock数n(对应频率模式的光子数)确定,例如np.array([2,0,0])代表“频率模式ω₀中有2个光子”的Fock态。目标是能通过索引调用对应Fock_state_nj对象,获取指定模式和光子数的态向量。

第一次尝试的代码及问题

Fock_states = []

ω = np.array([0, 2.5, 5])
ψ = np.zeros(len(ω)) 

def update_ψ(J,N):
    ψ[J] += N

n_max = 10

for j in range(0, len(ω)):
    for n in range(1, n_max+1):
        update_ψ(j,n)
        Fock_states.append(ψ)

这段代码的问题在于始终修改同一个ψ数组对象,所有添加到Fock_states的元素都指向同一个内存地址。循环结束后,ψ被累加为[55,55,55],因此列表中所有元素都是这个值。

第二次尝试的代码及问题

Fock_states = []

ω = np.array([0, 2.5, 5])
ψ = np.zeros(len(ω)) 

def update_ψ(J,N):
    ψ[J] += N

n_max = 10

for j in range(0, len(ω)):
    for n in range(1, n_max+1):
        update_ψ(j,n)
        Fock_states.append(ψ)
        update_ψ(j,-n)

这次尝试通过加减抵消数值,但本质还是操作同一个ψ数组。每次添加后又把对应位置的数值减回0,最终列表中所有元素都是全0数组,且依然是同一个对象的引用。

解决方案

方案1:使用列表存储独立向量

每次循环创建新的零数组,修改对应位置后添加到列表,确保每个元素都是独立的对象:

import numpy as np

ω = np.array([0, 2.5, 5])
Fock_states = []
n_max = 10

for j in range(len(ω)):
    for n in range(1, n_max + 1):
        # 每次生成新的零向量
        ψ = np.zeros(len(ω))
        ψ[j] = n
        Fock_states.append(ψ)

方案2:使用字典直接映射(n,j)到态向量

如果需要更直观地通过n和j调用向量,用字典存储更方便:

import numpy as np

ω = np.array([0, 2.5, 5])
Fock_states_dict = {}
n_max = 10

for j in range(len(ω)):
    for n in range(1, n_max + 1):
        ψ = np.zeros(len(ω))
        ψ[j] = n
        # 用(n,j)作为键,直接通过Fock_states_dict[(n,j)]调用
        Fock_states_dict[(n, j)] = ψ
        # 也可以用自定义字符串键:Fock_states_dict[f"Fock_state_{n}{j}"] = ψ

内容的提问来源于stack exchange,提问作者Cody Payne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:25:15