У меня есть Timeseries от Kaggle, которая является несчастным случаем DUI в Соединенных Штатах. Я создал небольшую программу на Pandas, которая сохраняет временный порядок, но делает так, чтобы в каждой строке было одинаковое количество аварий. Проблема, с которой я столкнулся, заключается в том, что эта программа приводит к сбоям в работе компьютера из-за требований к памяти Поэтому я пытался перенести код в Numpy, чтобы я мог скомпилировать его на Cython с помощью Memory Views, но у меня были проблемы с получением похожих результатов из Numpy Code. Это Pandas код:
new_time_series = (ts.loc[ts.index.repeat(ts.Accidents)]
.assign(Accidents=1,
groups=lambda x: np.arange(len(x))//1000
)
.groupby('groups')
.agg({'DateTime':'first',
'Accidents':'sum',
'Blood_Alcohol_Content':'mean',
'Num_Injuries':'mean'})
)
Это код Numpy, который у меня есть, проблема в том, что, хотя он намного проще в памяти, его легко комментировать и компилировать в Cython, ему не хватает способность разбивать строки на части. Таким образом, он дает уровень или нормализацию для Аварий, но в зависимости от того, на какую частоту установлена, и количество Аварий в каждой строке, результаты от этих двух могут быть радикально различными.
def generate_new_timeseries(ts, frequency=100):
DateTime = ts[:,0]
Blood_Alcohol_Content = ts[:,1]
Accidents = ts[:,2]
ans = np.zeros(shape=(len(Accidents), 3))
row_counter = 0
vol = 0
lasti = 0
for i in range(len(Accidents)):
vol += Accidents[i]
if vol >= frequency:
ans[row_counter][0] = DateTime[i] # time
ans[row_counter][1] = np.mean(Blood_Alcohol_Content[lasti:i+1])
ans[row_counter][2] = np.sum(Accidents[lasti:i+1])
row_counter += 1
lasti = i+1
vol = 0
return ans[:row_counter]
Может кто-нибудь дать мне несколько полезных советов о том, как я могу полностью сохранить код в Numpy для предварительной проверки, чтобы я не разрушал свой компьютер, получая при этом правильные результаты из Pandas пример, который я разместил первым. Буду очень благодарен за любую помощь.