0

我想初始化结构,它似乎太慢了。我如何使用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

另外,我是否可以通过在之前添加一些 [] 初始化来使其更快,或者这是我优化可能性的限制吗?非常感谢您的帮助!

4

2 回答 2

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);

请注意,不需要预先分配任何东西,因为这里没有任何显式循环。

于 2013-07-14T12:50:00.600 回答
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]
于 2013-07-14T14:41:50.387 回答