取数组中每n个元素的平均值并将MATLAB代码转换为Python

2024-09-30 02:34:19 发布

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

我试图将一个MATLAB程序转换成Python,但遇到了一个问题:我有一个5868x3500矩阵,包含5868个每日观察值,3500只股票的回报率和成交量,这些数据是用来产生一个市场流动性的衡量,每月平均每只股票的回报率超过其数量的比率。我有一个5868x1向量,名为Dummymonth,它为每个月分配一个从1到270的整数,每个月大约有22个交易日(1,1,1,1,1,1,1,1,1,1,1... 2,2,2,2,2,2... 270,270,270)。在

我陷入的循环需要将5868x3500矩阵转换为270x3500矩阵,方法是根据Dummymonth值取月平均值(即基本上取每22个值的平均值)。在

我尝试过尽可能清晰地转换代码(用MATLAB的find()函数代替Python的.argwhere()),但我对Python(和MATLAB真的)比较陌生,所以代码的问题对我来说不是很明显。在

下面是我要模拟的MATLAB代码部分:

numberofmonth=Dummymonth(size(Ret,1));
i=1;
for di=1:numberofmonth
    v=find(Dummymonth==di);
    for j=1:size(Ret, 2)
        Amihud2(i,j)=nanmean(Amihud1(v,j));
    end
    i=i+1;
end

下面是我在Python中看到的:

^{pr2}$

我经常看到的错误是“索引越界错误”。在


Tags: 代码forsize错误矩阵findend平均值
1条回答
网友
1楼 · 发布于 2024-09-30 02:34:19

我认为其中一个错误与Python的0索引有关。如果循环某个内容并从1开始,则会丢失第一个(索引0)值。这里有一个解决方案(有很多种):

#Create Dummy index
dummy =np.array([np.repeat(i,22) for i in np.arange(270)+1]).flatten()

#Make Dataset for example
dat = np.random.random((len(dummy),3500))

#Calculate average per month
dat2 = np.empty((270,3500))
i=-1
for m in np.unique(dummy):
    i=i+1
    dat2[i,:]=dat[dummy==m].mean(axis=0)

相关问题 更多 >

    热门问题