gloryzhu 发表于 2009-5-26 20:07

请教一个程序运行中清除部分变量加保存变量的编程问题。

我的程序运算得出的A矩阵的列数固定,而行数随运算时间累加,比如叫做A(n,N),N不变。
      N = 60; n =1e+9;
      for i = 1:n, A(i,1:N) = 100; end
我想实现的是当n到((1e+4)+1)时,让A矩阵的前面1到(1e+4)行保存到一个txt文档中,并在workspace中把它清空;然后当n运行到((2e+4)+1)时,重复上述操作,依次类推。

这样既不会让内存溢出,也可以便于查看结果。
望哪位大侠可以指点迷津,好让我拨开云雾见红日!    谢谢了!!

[ 本帖最后由 ChaChing 于 2009-5-26 20:50 编辑 ]

maigicku 发表于 2009-5-27 11:25

清除时用clear A(i,1:N)试试,保存用fprintf

[ 本帖最后由 maigicku 于 2009-5-27 15:08 编辑 ]

ChaChing 发表于 2009-5-27 14:05

不确定楼主的原始问题为何, 但若仅是重复性的结果输出, 後续分析计算并没用到的话, 可考量直接输出至档案即可, 无需使用内存空间

gloryzhu 发表于 2009-5-28 13:43

回复 沙发 maigicku 的帖子

恩,可以。
我直接使用 save clear两个命令完成了从矩阵到txt的转移加清除。
使用fprintf时发现都保存到一列中去了。
问两个幼稚的问题:
%3.1f   %5.0f 中的f表示float,而 3.1, 5.0 表示什么呢?
如果要保存的矩阵里含有复数或是负数,保存下来的数据意义还在吧?

ChaChing 发表于 2009-5-30 20:18

回复 地板 gloryzhu 的帖子

help fprintf
试试不就知道!?

berryhaw 发表于 2009-6-3 21:52

呵呵,我这两天运行的程序占用内存也很大,遇到了一样的问题,虽然我的工作站内存有10G之多,但仍不够开销。下面说一下解决办法。
上面介绍到用fprintf,对于大量的矩阵存储,这个方法效率非常低。
可以用fwrite函数将矩阵写入文件。
定义一个500*50*25的三维矩阵IS,
node=25;
IS=repmat(2000,);
for i=1:node      
    filename=strcat(num2str(i),'IS','.','bin');
    fid=fopen(filename,'wb');
    fwrite(fid,IS(:,:,i),'integer*2');      
end
这里将IS的中每个二维矩阵写入对应的文件名中,文件存储用了二进制格式。二进制文件在windows下好象无法直接查看。如果想查看,可以用以下代码读取
NIS=repmat(0,);
for i=1:node   
    filename=strcat(num2str(i),'IS','.','bin');
    fid=fopen(filename,'rb');
    NIS(:,:,i)=fread(fid,,'integer*2');
    fclose(fid);
end   
第一次回答问题,不足之处大家批评啊,:lol
页: [1]
查看完整版本: 请教一个程序运行中清除部分变量加保存变量的编程问题。