Я хотел бы создать словарь или список под названием Fock_states, к которому я мог бы добавлять различные векторы. Различные векторы будут обозначаться индексом j, который указывает, какому значению частоты соответствует состояние Фока из диапазона частот ω = np.array([ω_0, ω_1, ω_2]), где ω_j принимают на некоторых заданных значениях и их числе Фока n, которое определяет, сколько фотонов находится в этом частотном режиме. Так, например, один из базисных векторов, который я хочу определить, — это Fock_state_12 = np.array([2,0,0]), который представляет собой состояние Фока, которое кодирует «2 фотона в частотном режиме ω_0». В общем, я хочу иметь вызываемые объекты Fock state_nj, которые кодируют «n фотонов в частотном режиме ω_j» и иметь возможность вызывать их по их индексам. Сначала я попробовал что-то вроде этого:
Код: Выделить всё
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,55], [55,55,55,55],...,[55,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)
Но это возвращает массив списков, заполненных нулями.
Будем благодарны за любую помощь!
Подробнее здесь:
https://stackoverflow.com/questions/786 ... -and-index