我想将结构初始化,而且似乎太慢了。 如何使用 repmat 进行此操作,这应该是Matlab中更快的解决方案? 原本:
for i=1:30
myloc.one.matrixBig(i,1).matrixBig= zeros(6,6);
for j=1:5
myloc.one.id(i,j) = 0;
for k=1:10
myloc.one.final(j,k).final(i,1) = 0;
end
end
end
修改
for j=1:30
for i=1:10
myObject{i,j}.s = zeros(6,1);
myObject{i,j}.f = zeros(6,1);
end
end
另外,我是否能够通过添加一些[]初始化来加快速度,或者是我的优化可能性的限制? 非常感谢您的帮助!
答案 0 :(得分:1)
这是第一个代码片段的等效矢量化代码:
myloc.one = struct('id', zeros(30, 5), ...
'matrixBig', struct('matrixBig', repmat({zeros(6)}, 30, 1)), ...
'final', struct('final', repmat({zeros(30, 1)}, 5, 10)));
或者:
myloc.one = struct('id', zeros(30, 5), ...
'matrixBig', repmat(struct('matrixBig', zeros(6)), 30, 1), ...
'final', repmat(struct('final', zeros(30, 1)), 5, 10));
选择您最喜欢的那个。
对于第二个(已编辑)部分,可以替换为:
myObject = repmat({struct('s', zeros(6, 1), 'f', zeros(6, 1))}, 30, 10);
请注意,不需要预先分配任何内容,因为此处没有任何显式循环。
答案 1 :(得分:0)
在这种情况下,第一个问题是为什么使用结构的单元格数组。 matlab的基本原理之一是所有东西都可以被矢量化。因此,建立一个结构矩阵。
% Define the empty struct, struct itself is vectorised
myloc=struct('s',cell(10,30),'f',cell(10,30));
%Assign values
[myloc(:).s]=deal(0),[myloc(:).f]=deal(0);
结构矩阵是一种功能更强大的数据类型。例如,如果要将字段的单行提取到矢量中,则只需使用以下语法
即可sRow8=[myloc(8,:).s]