耗尽内存,preallocate记忆
22日视图(30天)
显示旧的评论
我如何更改代码和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)
沃尔特·罗伯森
6分钟前
为了提高效率,但
不
不是任何更好的内存分配:
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找到任何匹配的条目。