Я пытаюсь преобразовать программу 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 *Функция 1007 * для Python * .argwhere()
), но я относительно новичок в Python (и действительно в MATLAB), поэтому проблемы с кодом не кажутся мне сразу очевидными.
Вот раздел кода MATLAB Iя пытаюсь эмулировать:
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])
Ошибки, которые я обычно вижу, это «ошибки индексации за пределами».