Numpy matrix不更新valu

2024-05-19 10:54:20 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有一个数据集,包含2008年到2011年的(业务)每日数据,用于存储在名为storeddata的pandas数据框架中的5个变量。我想计算一个指数加权移动平均协方差矩阵的每一天。我有一个起始期(比如从2008-01-01到2009-01-01),我计算协方差矩阵,一个5x5矩阵,叫做covmat1。你知道吗

现在我想遍历storeddata-数据帧,并在2009-01-01之后为每个工作日更新一个名为covfinaldict的dict和一个5x5矩阵。我试过这段代码:

from pandas.tseries.offsets import BDay
import pandas as pd
import numpy as np
import datetime as dt

zeromatrix=np.mat(np.zeros((5,5)))

for row in storeddata.iterrows():
    if row[0]>dt.datetime(2009,01,01):
        mat1=covfinaldict[row[0]-BDay(1)]  
        for x in range(5):
            for y in range(5):
                if x==y:
                    zeromatrix[x,y]=sqrt(0.93*(mat1[x,y]**2)+0.07*(row[1][x+1]**2))
                else:
                    zeromatrix[x,y]=0.93*mat1[x,y]+0.07*row[1][x+1]*row[1][y+1]
        covfinaldict[row[0]]=zeromatrix  
    else:
        covfinaldict[row[0]]=covmat1

这些公式是指数加权移动平均数的近似值,其细节无关紧要。在2009-01-01之后的每一天,我都会得到相同的5x5矩阵(尽管它与covmat1不同),因此计算不起作用。此外,如果我在控制台中运行sqrt(0.93*(mat1[x,y]**2)+0.07*(row[1][x+1]**2)),我得到0.1613,如果我运行zeromatrix[x,y],我得到0.158(x=4,y=4)。这对我来说毫无意义。一个等式的左边怎么可能不等于右边?非常感谢您的解释。你知道吗


Tags: 数据inimportpandasforasnp矩阵
1条回答
网友
1楼 · 发布于 2024-05-19 10:54:20

您应该复制zeromatrix对象:

import copy

以及

    covfinaldict[row[0]]=copy.copy(zeromatrix)

否则,所有coffinaldict行将指向同一对象。你知道吗

Python docsPython中的赋值语句不复制对象,而是在目标和对象之间创建绑定。对于可变或包含可变项的集合,有时需要一个副本,以便一个可以更改一个副本而不更改另一个副本。此模块提供通用的浅拷贝和深拷贝操作(解释如下)。

相关问题 更多 >

    热门问题