excel - Matlab 数据预处理和动态结构分配

标签 excel matlab matrix vector struct

我对 Matlab 还很陌生,我正在努力弄清楚如何正确预处理我的数据,以便用它进行一些计算。

我有一个 Excel 表格,其中包含许多公司的财务日志报表,其中每一行都是一天,每一列都是一家公司:

enter image description here

我将所有内容正确导入到 Matlab 中,如下所示:

enter image description here

现在我必须创建所谓的“滚动窗口”。为此,我使用以下代码:

function [ROLLING_WINDOWS] = setup_returns(RETURNS)

    bandwidth = 262;
    [rows, columns] = size(RETURNS);

    limit_rows = rows - bandwidth;


    for i = 1:limit_rows
        ROLLING_WINDOWS(i).SYS = RETURNS(i:bandwidth+i-1,1);
    end

end

好吧,如果我为返回的第一列运行此代码,则一切正常...但我的目标是为日志返回的每一列生成相同的内容。所以基本上我必须添加第二个 for 循环...但我不知道的是我需要使用哪种语法才能使“.SYS”动态化并基于包含公司名称的字符串单元格数组,以便...

ROLLING_WINDOWS(i)."S&P 500" = RETURNS(i:bandwidth+i-1,1);
ROLLING_WINDOWS(i)."AIG" = RETURNS(i:bandwidth+i-1,2);
and so on...

感谢各位的帮助!

编辑:工作功能

function [ROLLING_WINDOWS] = setup_returns(COMPANIES, RETURNS)

    bandwidth = 262;
    [rows, columns] = size(RETURNS);

    limit_rows = rows - bandwidth;

    for i = 1:limit_rows
        offset = bandwidth + i - 1;
        for j = 1:columns
            ROLLING_WINDOWS(i).(COMPANIES{j}) = RETURNS(i:offset, j);
        end
    end

end

好吧,一切都很完美...只有一个问题...matlab intellissense 告诉我“ROLLING_WINDOWS 似乎在每次循环迭代时都会改变大小 bla bla bla 考虑预分配”...我该如何执行此操作?

最佳答案

你就快到了。通过为字段构建字符串来使用动态字段名称。您的字段位于名为 COMPANIES 的元胞数组中,因此:

function [ROLLING_WINDOWS] = setup_returns(COMPANIES, RETURNS)

    bandwidth = 262;
    [rows, columns] = size(RETURNS);

    limit_rows = rows - bandwidth;

    %// Preallocate to remove warnings
    ROLLING_WINDOWS = repmat(struct(), limit_rows, 1);

    for i = 1:limit_rows
        offset = bandwidth + i - 1;
        for j = 1:columns
            %// Dynamic field name referencing
            ROLLING_WINDOWS(i).(COMPANIES{j}) = RETURNS(i:offset, j);
        end
    end

end

如果您想了解更多信息,请阅读 MathWorks 的 Loren Shure 撰写的一篇精彩文章:http://blogs.mathworks.com/loren/2005/12/13/use-dynamic-field-references/ ...但基本上,如果您有一个字符串并且您想使用该字符串创建一个字段,您可以这样做:

str = '...';
s.(str) = ...;

s 是您的结构,str 是您要命名字段的字符串。

关于excel - Matlab 数据预处理和动态结构分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33705267/

相关文章:

R:选择矩阵中特定列具有特定值的行

php - 如何使用 PHP 将数据添加到现有的 Excel 文件?

Python:如何根据 if 语句的结果将元素输出到特定的列和行

Matlab:根据创建日期对文件进行排序

MATLAB:寻找更快/更优雅的方法来计算非常长的时间序列的移动中值绝对偏差

python - 将表表示为矩阵

R:在每列中每两行查找最大值

excel/vba - 查找列中特定值的第一次和最后一次出现

Excel 图表 : prevent auto grouping of dates

c# - 将 Matlab Datenum 转换为 Datetime