在matlab / octave中预分配内存

时间:2013-11-03 14:32:17

标签: arrays matlab multidimensional-array octave

我为一个大型阵列预分配内存,但新数据附加在数组的末尾而不是写入数据,我该如何解决这个问题。所以我可以预先为大型阵列分配内存。

注意数组是44101x5001我在示例中只使用了较小的数字。

示例:

clear all
xfreq=zeros(10,10); %allocate memory

for ww=1:1:10
     xfreq_new = xfreq(:,1)+1+ww;
     xfreq=[xfreq xfreq_new]; %would like this to over write and append the new data where the preallocated memory of zeros are instead of appending to the end of it.
end

如果你运行它,你会注意到它附加了那些而不是写了零。

阿罗哈 瑞克

希望这能更好地解释事情 分配数组

1)分配零的内存

[0 0 0 0 0
0 0 0 0 0
0 0 0 0 0]

2)用数字覆盖分配的零存储器,数字可以是任何不仅仅是第一个,我用第一个作为例子

[1 0 0 0 0
1 0 0 0 0
1 0 0 0 0]

3)仍然用一个数字覆盖分配的内存零,数字可以是任何不仅仅是第一个,我用第一个作为例子

[1 1 0 0 0
1 1 0 0 0
1 1 0 0 0]

问题出在这条线上  xfreq = [xfreq xfreq_new]; %希望过度写入并将新数据附加到预分配的零存储器而不是附加到它的末尾。     端

1 个答案:

答案 0 :(得分:3)

如果您希望所有条目等于x

,这将有效
  x = (some number)
  A = zeros(10,n)
  for i=1:n
    A(:,i) = x;
  end

如果您希望列与您必须执行的其他列相同

  A = zeros(10,n)
  for i=1:n
    A(:,i) = v;
  end

其中v是大小为(10,1)的向量