【问题标题】:computation of Hankel matrix for large data series大数据系列的汉克尔矩阵计算
【发布时间】:2017-10-27 17:55:38
【问题描述】:

我想对以下主题进行研究:

我经常在我的研究部分使用以下矩阵

我写了以下代码

Function [x ]=create_matrix1(b,l)
%This Function is used to Create Hankel Type Data Matrix
%x is a given data
%l represent window size
    n = length(b);
    m = n-l+1;
    x = zeros(m,l);
    for i=1:m
        x(i,:)=b(i:i+l-1);
    end;

对于数据量小的时间序列是正确的,但是对于大的时间序列,内存崩溃,例如,让我们从 yahoo Finance 历史价格中获取真实数据

时间序列的长度等于

>> length(BMW)

ans =

   257

对于这样的矩阵,方法可以正常工作

>> X=create_matrix(BMW,50);

X 的大小相等

>> size(X)

ans =

   208    50

现在让我们考虑以下数据 加载 quakevibration.mat

它生成样本大小为 10000 的数据,在这个程序中会崩溃,我的最终目标是估计给定矩阵的 SVD,创建矩阵但我需要 SVD 的近似值,哪种方法对此有用?一般来说大时间序列,如何处理?

【问题讨论】:

    标签: matlab matrix svd


    【解决方案1】:

    如果我理解您的问题,您正在寻找例如here 引入的截断或缩减 SVD 方法。

    该方法在Matlab中实现,名为Fast SVD,高效逼近SVD。

    另外,如果内存有限,您可以使用在线算法,例如this

    【讨论】:

    • 顺便说一句,我使用的是matlab 2017a并且程序运行正常,也许最新版本的matlab正在使用一些特殊的库来加速程序?
    • @datodatuashvili 是的,这是可能的。由于我们不知道背后代码的确切实现,这种改进可以在最新版本中发生。顺便说一句,您可以按照一些现有的基准来找到它。
    • 但是当我们没有足够的内存时?例如我们正在尝试分析大小为 500000 的数据,那么是否可以创建 SVD ?
    • @datodatuashvili 如果内存有限,您可以使用在线算法,例如stats.stackexchange.com/a/179539/144441
    • 谢谢我的朋友,我的第一个问题是关于矩阵本身,创建维度超出内存的矩阵,如何在不创建实际矩阵本身的情况下从原始时间序列计算矩阵的 SVD?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 2013-12-12
    • 2011-09-09
    • 2023-03-07
    • 2020-01-28
    相关资源
    最近更新 更多