我试图将不同的平均列表保存到名为的列表中
storage_risk_prem
使用以下代码:
storage_risk_prem=list(range(len(simul_data)))
avg_risk_prem=list(range(len(simul_data[0])))
for i in range(len(simul_data)):
for j in range(len(avg_risk_prem)):
avg_risk_prem[j]=np.average(simul_data[i][j])
***storage_risk_prem[i]=avg_risk_prem***
storage=list(range(len(simul_data)))
w_mean_i=list(range(len(simul_data)))
w_std_i=list(range(len(simul_data)))
for i in range(len(w_mean_i)):
w_mean_i[i]=w.dot(storage_risk_prem[i])
w_std_i[i]=np.sqrt(w.dot(cal_vcov_sim(simul_data)[i].dot(w)))
storage[i]=(w_mean_i[i],w_std_i[i])
return storage
然而,当我检查结果时,它只存储了相同的平均列表(std位很好)。
所以仔细查看了我的代码并发现斜体的行导致了问题,但我不知道如何在不使用np.vstack
的情况下避免这个问题,但我不想滥用这么多的导入改进我的编程。
答案 0 :(得分:1)
这是因为使用您的方法可以多次添加指向列表的指针。 您必须每次复制元素,例如list(my_list)
a=[1,2,3]
b=[list(a), list(a)]
b
=> [[1, 2, 3], [1, 2, 3]]
a[0] = 10
b
=> [[1, 2, 3], [1, 2, 3]]