声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1840|回复: 5

[综合讨论] 请教一个程序运行中清除部分变量加保存变量的编程问题。

[复制链接]
发表于 2009-5-26 20:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我的程序运算得出的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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-5-27 11:25 | 显示全部楼层
清除时用clear A(i,1:N)试试,保存用fprintf

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

评分

1

查看全部评分

发表于 2009-5-27 14:05 | 显示全部楼层
不确定楼主的原始问题为何, 但若仅是重复性的结果输出, 後续分析计算并没用到的话, 可考量直接输出至档案即可, 无需使用内存空间
 楼主| 发表于 2009-5-28 13:43 | 显示全部楼层

回复 沙发 maigicku 的帖子

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

回复 地板 gloryzhu 的帖子

help fprintf
试试不就知道!?
发表于 2009-6-3 21:52 | 显示全部楼层
呵呵,我这两天运行的程序占用内存也很大,遇到了一样的问题,虽然我的工作站内存有10G之多,但仍不够开销。下面说一下解决办法。
上面介绍到用fprintf,对于大量的矩阵存储,这个方法效率非常低。
可以用fwrite函数将矩阵写入文件。
定义一个500*50*25的三维矩阵IS,
node=25;
IS=repmat(2000,[500,50,node]);
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,[500,50,node]);
for i=1:node   
    filename=strcat(num2str(i),'IS','.','bin');
    fid=fopen(filename,'rb');
    NIS(:,:,i)=fread(fid,[500 50],'integer*2');
    fclose(fid);
end   
第一次回答问题,不足之处大家批评啊,:lol

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-30 03:12 , Processed in 0.084726 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表