0

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

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

问候,

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

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

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

于 2012-12-09T22:02:21.243 回答
1

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

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

如果没有,请告诉我。

于 2012-12-10T22:03:13.263 回答