在MATLAB中预分配结构

时间:2012-12-09 21:19:00

标签: matlab struct

我有矩阵A,它是一个1 * 11470结构,每个A,例如A(1,1)有两个元素,nPoints和matrix。我将进行一些计算,在这些计算之后,A.matrix中的元素数量将增加8倍,但A.nPoints将相同。我想为这个过程做预分配,但我找不到如何。你能帮我吗?

注意:为了使我的问题更加清晰,我添加了两个截图。我想要的是,例如A(1,2).matrix有3个元素。在进行某些计算之后,我将在该矩阵内部有24个元素,我需要预分配例如A2矩阵,其长度与(1 * 110470)相同,nPoints大小相同,但A大小为8倍( 1,k)的.matrix。

此致

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

我无法按照您的问题的具体细节,但预先分配大小变化的矩阵的一般解决方案是从头开始将其初始化为最大大小。然后,如果您暂时需要在其中保存一组较小的数字,请通过索引编入数字而不是重置其大小。

例如,如果您需要的最大尺寸为1x11470,请将变量初始化为此尺寸

a = NaN(1, 11470); 

然后,如果您需要在其中存储较小尺寸的矢量,则可以执行此操作

a(1:5) = rand(1,5);

如果您需要访问此向量,则可以

<强> 1。快速找到它的索引,

  a(~isnan(a)) 

<强> 2。每次修改时都要跟踪子阵列的大小

a.mat = nan(1,11470)
a.idx = 5; 
a.mat(1:a.idx) = rand(1,a.idx);

如果你关注速度,那么第二种方法就更好了。

答案 1 :(得分:1)

我想这可以解决你的问题:

B = struct ('nPoints',repmat({zeros(1)},1,110470), 'matrix',repmat ({zeros([(max([tracks(:).nPoints])^3) 3])},1,110470));

如果没有,请告诉我。

相关问题