在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
答案 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}}次,因为我们已经创建了一个实例。