首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Frame windowing vs Series的性能问题

Frame windowing vs Series的性能问题
EN

Stack Overflow用户
提问于 2019-07-12 18:53:15
回答 1查看 146关注 0票数 0

我使用的是c#的Deedle,与系列中的相同操作相比,通过帧进行窗口操作非常慢。例如,对于类似大小的序列和帧,我看到的是60ms和3500ms (序列和帧)。

以前有没有人见过这个?

代码语言:javascript
复制
var msftRaw = Frame.ReadCsv(@"C:\Users\olivi\source\repos\ConsoleApp\MSFT.csv");
var msft = msftRaw.IndexRows<DateTime>("Date").SortRowsByKey();

var rollingFrame = msft.Window(60); // 7700 ms

var openSeries = msft.GetColumn<double>("Open");
var rollingSeries = openSeries.Window(60); // 14 ms

var oneSeriesFrame = Frame.FromColumns(new Dictionary<string, Series<DateTime, double>> { { "Open", openSeries } });
var rollingFakeFrame = oneSeriesFrame.Window(60); // 3300mm

在处理金融时间序列数据时,这是相当常见的操作,例如计算价格之间的滚动相关性,或者在另一个价格时间序列上存在条件时计算滚动已实现波动率。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-16 00:18:46

我找到了一个解决性能问题的方法:分别对每个系列执行滚动操作,将滚动系列连接到一个帧中,以便它们按日期对齐,并在帧上编写处理函数,在处理函数中选择每个系列。

从上面的例子继续:

代码语言:javascript
复制
private static double CalculateRealizedCorrelation(ObjectSeries<string> objectSeries)
{
    var openSeries = objectSeries.GetAs<Series<DateTime, double>>("Open");
    var closeSeries = objectSeries.GetAs<Series<DateTime, double>>("Close");
    return MathNet.Numerics.Statistics.Correlation.Pearson(openSeries.Values, closeSeries.Values);
}

var rollingAgg = new Dictionary<string, Series<DateTime, Series<DateTime, double>>>();
foreach (var column in msft.ColumnKeys)
{
    rollingAgg[column] = msft.GetColumn<double>(column);
}

var rollingDf = Frame.FromColumns(rollingAgg);
var rolingCorr = rollingDf.Rows.Select(kvp => CalculateRealizedCorrelation(kvp.Value));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57005529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档