gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:13:00 25 4
gpt4 key购买 nike

我对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com