如何在Matlab中预分配全局结构数组

时间:2015-03-13 18:12:44

标签: matlab

在Matlab中,我试图预先分配全局结构数组。 1.在关键字global之前添加错误。 2.我在尝试预分配对象时遇到错误

E.g。 - 订阅的分配维度不匹配。

IronCondor出错(第41行)    OptionsChain(MaxOptions + 1)= s; %确保兼容性

MaxOptions = 3000;
OptionsChain = struct('symbol', {}, 'expiration', {}, 'strike_price', {}, 'bid', {}, 'ask', {}, 'last', {}, 'volume', {}, 'last_time', {});

if ~isempty(OptionsChain) && isstruct(OptionsChain)
   OptionsChain(MaxOptions+1) = s; % make sure compatibility
end

1 个答案:

答案 0 :(得分:1)

请改为:

MaxOptions = 3000;
OptionsChain = struct('symbol', {}, 'expiration', {}, 'strike_price', {}, 'bid', {}, 'ask', {}, 'last', {}, 'volume', {}, 'last_time', {});
OptionsChain = repmat(OptionsChain, MaxOptions, 1);

您的代码不起作用,因为OptionsChain最初是一个大小为1的结构。执行OptionsChain(MaxOptions + 1)意味着您正在尝试将结构放置在位置3001,其中包含OptionsChain超出范围。

因此,您可以使用repmat复制for 3000次来完成我上面所做的操作,这样您就可以获得该结构的3000个元素,或者以不太优雅的方式,您可以在一个OptionsChain = struct('symbol', {}, 'expiration', {}, 'strike_price', {}, 'bid', {}, 'ask', {}, 'last', {}, 'volume', {}, 'last_time', {}); s = OptionsChain; for idx = 1 : MaxOptions-1 OptionsChain(end+1) = s; end 循环:

end+1

MaxOptions-1允许你在数组末尾处理某些内容,我们只需要执行{{1}}次,因为我们已经创建了一个实例。