耗尽内存,preallocate记忆

22日视图(30天)
剧中,索菲娅
剧中,索菲娅 大约21小时前
我如何更改代码和preallocate内存,避免耗尽内存。
allspiketimes = xlsread ();%文件是一个数值数组1多数事件1列,以秒
allspiketimes = allspiketimes (: 1);
allvoctimes = xlsread ();%文件是100事件的数字数组1列,以秒
allvoctimes = allvoctimes (: 1);
nvoctimes =大小(allvoctimes, 1);
allspikes = [];
j = 1: nvoctimes
spiketimes = allspiketimes (allspiketimes (: 1) > allvoctimes (j, 1) -22050 &allspiketimes (: 1) < allvoctimes (j, 1) + 22050, 1);
如果~ isempty (spiketimes)
次要情节(2,1,1),情节(spiketimes-allvoctimes (j, 1), j,“k”。,“Markersize”5);
甘氨胆酸ax =;
斧子。XLim = (-22050 - 22050);
ax.XTick = (22050:22050:22050);
ax.XTickLabel = (-0.5:0.5:0.5);
ax.YLabel.String =“Callnumber”;
ax.YLabel.FontSize = 14;
allspikes = [allspikes; spiketimes-allvoctimes (j)];
1评论
马特·J
马特·J 约14小时前
没有什么在你贴代码表明为什么你耗尽内存。没有信息对任何东西有多大。

登录置评。

答案(1)

沃尔特·罗伯森
为了提高效率,但 不是任何更好的内存分配:
allspiketimes = xlsread ();%文件是一个数值数组1多数事件1列,以秒
allspiketimes = allspiketimes (: 1);
allvoctimes = xlsread ();%文件是100事件的数字数组1列,以秒
allvoctimes = allvoctimes (: 1);
nvoctimes =大小(allvoctimes, 1);
allspikesc =细胞(nvoctimes, 1);
j = 1: nvoctimes
spiketimes = allspiketimes (allspiketimes (: 1) > allvoctimes (j, 1) -22050 &allspiketimes (: 1) < allvoctimes (j, 1) + 22050, 1);
如果~ isempty (spiketimes)
次要情节(2,1,1),情节(spiketimes-allvoctimes (j, 1), j,“k”。,“Markersize”5);
甘氨胆酸ax =;
斧子。XLim = (-22050 - 22050);
ax.XTick = (22050:22050:22050);
ax.XTickLabel = (-0.5:0.5:0.5);
ax.YLabel.String =“Callnumber”;
ax.YLabel.FontSize = 14;
allspikesc {j} = spiketimes-allvoctimes (j);
结束
结束
allspikes = vertcat (alllspikesc {:});
理论上,你屏蔽-22050 + 22050可以选择一切每次迭代(例如如果是错误的规模和数量应(说)-22.050 + 22.050),所以你的潜在产出的大小是1多数乘以100。
我不认为你的输出是组织良好。你不保持任何记录的边界在哪里,和你不记录allvoctimes找到任何匹配的条目。

下载188bet金宝搏


释放

R2023a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!