2

我正在尝试优化这段代码。这是简化版本(不是实际代码)。

for i = 1:1000000
  a(i).x = a(i).x+1;
  a(i).y = a(i).y*2;
  a(i).f = i:i+128;
end

我知道我是否尊重 a(i) 一旦它会更快。如下所示:

for i = 1:1000000
  b = a(i);
  b.x = b.x+1;
  b.y = b.y*2;
  b.f = i:i+128;
  a(i) = b;
end

在这里,我将 a(i) 复制到 b 并在最后复制回 a(i)。是否可以只定义一个指向 a(i) 的指针?类似于 C++ 的东西。

4

1 回答 1

1

MATLAB 的handle数据类型类似于其他语言中的引用,但我认为这在这里不合适。

我在这里建议的主要优化是使用大型数组结构,而不是大型结构数组。换句话说,您的代码可能看起来更像这样:

for i = ...
    a.x(i) = a.x(i) + 1;
    ...
end

这种方法通常速度更快,内存效率更高。

于 2012-12-04T07:10:23.727 回答