【问题标题】:How do I Preallocate a Global Array of Structures in Matlab如何在 Matlab 中预分配全局结构数组
【发布时间】:2015-05-16 08:17:16
【问题描述】:

在 Matlab 中,我试图预先分配一个全局结构数组。 1. 前置关键字 global 会出错。 2. 尝试预分配对象时出错

例如- 下标赋值维度不匹配。

IronCondor 中的错误(第 41 行) 选项链(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

【问题讨论】:

  • 嗨!我的回答对你有帮助吗?

标签: matlab


【解决方案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 上,这是超出范围的。

因此,您可以执行我上面所做的操作,使用 repmat 复制 OptionsChain 3000 次,以便获得该结构的 3000 个元素,或者以不太优雅的方式,您可以在 for 中执行此操作循环:

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 次执行此操作,因为我们已经创建了它的一个实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2011-01-31
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多