【发布时间】:2019-06-22 23:53:27
【问题描述】:
我正在尝试将 MATLAB 程序转换为 Python,但遇到了一个带有特定循环的障碍:我有一个 5868x3500 矩阵,包含 5868 个每日观察值,3500 只股票的回报率和交易量的比率,此数据用于生成通过每月平均每只股票的回报与其交易量的比率来衡量市场流动性。我有一个名为 Dummymonth 的 5868x1 向量,它为每个月分配一个从 1 到 270 的整数,每个月有大约 22 个交易日 (1,1,1,1,1,1,1,1,1,1,1... 2,2,2,2,2,2... 270,270,270)。
我坚持的循环需要通过根据 Dummymonth 值取月平均值(即基本上取每 22 个值的平均值),将 5868x3500 矩阵转换为 270x3500 矩阵。
我已经尝试尽可能干净地转换代码(用 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 中所拥有的:
import numpy as np
Amihud2 = np.empty((270, len(Amihud1)))
for month_num in range(0, 270):
v = np.argwhere(dummy == month_num)
for i in range(1, len(Amihud1)):
for j in range(1, len(Amihud1[0])):
Amihud2[i][j] = np.mean(Amihud1[v][j])
我经常看到的错误是“索引越界错误”。
【问题讨论】:
标签: python arrays matlab numpy