#python #loops #dictionary
#python #циклы #словарь
Вопрос:
Здравствуйте, итак, я пытаюсь запустить этот код, где я хочу, чтобы словарь X_Matrices содержал все матрицы X_matrix_i. Однако все, что я получаю, это то, что X_Matrices в конечном итоге является конечным X_matrix_i конечного цикла. Я не совсем уверен, где я застрял. Любая информация была бы оценена! Спасибо.
n = 5
T = 3
p = 5
X_matrix_i = np.zeros((T,p))
X_Matrices = {}
for i in ran&e(n):
X_Matrices["X" str(i)] = np.zeros((T,p))
for i in ran&e(n):
for t in ran&e(T):
#initial randomness for loop t
ϵ = np.random.normal(0,1,1)
η = np.random.normal(0,1,1)
Covu = np.zeros((p,p))
#Generatin& X and e of X
for j in ran&e(len(Covu[0])): #covariance matrix for vector x
for l in ran&e(len(Covu)):
Covu[l,j] = 0.7**(np.abs(l-j))
Zerop = np.zeros(p) # mean vector for vector x
x = np.random.multivariate_normal(Zerop,Covu)
X_matrix_i[t] = x
X_Matrices["X" str(i)] = X_matrix_i
Ответ №1:
Здесь есть две проблемы. Первая — это конфликтующие переменные «i» в циклах for. Одна из них должна быть изменена! Я заменил первую переменную цикла i на k.
for k in ran&e(n):
for t in ran&e(T):
#initial randomness for loop t
Вторая проблема заключается в том, что, выполняя
X_Matrices["X" str(i)] = X_matrix_i
(последняя строка) вы ссылаетесь на X_Matrices [«X» str(i)] в X_matrix_i! Проблема с изменяемыми объектами в Python возникает! Вместо этого вам следует использовать мелкое копирование для присвоения значений X_Matrices[«X» str(i)]. Таким образом, будет назначена копия X_matrix_i, а не сам X_matrix_i.
Я заменил последнюю строку на
X_Matrices["X" str(k)][:] = X_matrix_i
и проблема решена.
[:] здесь действует как мелкая копия.
Комментарии:
1. Привет, Мохаммад:)! Это исправило это, что очень помогает! хорошего дня!
Ответ №2:
Я думаю, что ваша проблема вызвана повторным объявлением i во втором цикле for
for j in ran&e(len(Covu[0])): #covariance matrix for vector x
for i in ran&e(len(Covu)):
Covu[i,j] = 0.7**(np.abs(i-j))
Попробуйте переименовать i во что-нибудь другое, и это должно решить вашу проблему.
Комментарии:
1. привет, экрем. Я пытался это сделать, и я просто отредактировал код, все X_Matrices по-прежнему просто выдают мне X_matrix_i для последнего цикла i . Я бы хотел, чтобы после каждого t-цикла «X0,… Xi» было основано на каждом из этих t-циклов.