声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 6106|回复: 16

[编程技巧] 如何保存这个二维数组

[复制链接]
发表于 2007-8-1 16:09 | 显示全部楼层 |阅读模式

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

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

x
我想把循环中一个二维数组保存下来,这个数组每次循环都要更新,
该如何实现呢?   例如:
for j=1:5
   for i=1:j+1
       a=i+1;
       b=i*i;
       c=[a b;a+b b-a];
   end
end
怎样能保存j分别为1,2,3,4,5时c矩阵的值
回复
分享到:

使用道具 举报

发表于 2007-8-1 16:24 | 显示全部楼层
A=zeros(2,2,5);
for j=1:5
   for i=1:j+1
       a=i+1;
       b=i*i;
       c=[a b;a+b b-a];
   end
A(:,:,j)=c
end
可以满足你的要求,但是不一定是最简单的形式。
建议利用数据的规律去掉循环

评分

1

查看全部评分

发表于 2007-8-1 17:15 | 显示全部楼层
这个问题也可以用元胞数组存储,而且更简洁。

评分

1

查看全部评分

发表于 2007-8-1 17:33 | 显示全部楼层
单元数组的方式
A=cell(1,5);
for j=1:5
   for i=1:j+1
       a=i+1;
       b=i*i;
       c=[a b;a+b b-a];
   end
A{j}=c
end
发表于 2007-8-1 20:09 | 显示全部楼层
for j=1:5
    pp=[];
    for i=1:j+1
        a=i+1;
        b=i*i;
        c=[a b;a+b b-a];
        pp=[pp;c];
   end
   pp
end
  可以保存j分别为1,2,3,4,5时c矩阵的值

[ 本帖最后由 home96 于 2007-8-1 20:35 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2007-8-2 11:06 | 显示全部楼层
再请问一下,如果这个C矩阵维数比较大,如30*30阶,想把 C  以矩阵的格式保存到文件中以便以后利用这个矩阵,可下面的代码不能实现,该怎办呢?
    A=zeros(2,2,5);
for j=1:5
   for i=1:j+1
       a=i+1;
       b=i*i;
       c=[a b;a+b b-a];
   end
A(:,:,j)=c;
   fid_out=fopen(c.dat','w')
    fprintf(fid_out,'%4d',A);
    fclose(fid_out);
end
发表于 2007-8-2 12:26 | 显示全部楼层

回复 #6 shanlihong 的帖子

可以实现的,不管数据是存到cell数组还是矩阵。都可以存成mat格式,我觉得存成mat格式没有txt格式方便(个人看法)。txt数据的存取可以参考eight的精华帖子
 楼主| 发表于 2007-8-3 09:38 | 显示全部楼层
查看了eight的精华帖子
-----使用文本文件进行数据存取的技巧总结----,学会了如何对已有的txt文件操作

问题是如何将下面在窗口输出的A阵保存为文本文件,若A矩阵维数比较大,如30*30阶,怎样才能保存为30*30的矩阵格式呢
A=zeros(2,2,5);
for j=1:5
   for i=1:j+1
       a=i+1;
       b=i*i;
       c=[a b;a+b b-a];
   end
A(:,:,j)=c
end
发表于 2007-8-3 11:35 | 显示全部楼层
原帖由 shanlihong 于 2007-8-3 09:38 发表
查看了eight的精华帖子
-----使用文本文件进行数据存取的技巧总结----,学会了如何对已有的txt文件操作

问题是如何将下面在窗口输出的A阵保存为文本文件,若A矩阵维数比较大,如30*30阶,怎样才能保存为30* ...


如果保存为 mat 格式,直接用 save 就可以了;txt 格式的话,用 fprintf 试试吧
 楼主| 发表于 2007-8-3 15:21 | 显示全部楼层
辛苦 花如月和 eight了:handshake
再问个问题:
若想一行输出20个数,fprinft输出格式
fprintf(fid_out,'%4d。。。%d4',A); 省略号里我得写20个%d吗,查了一些书 都找不到该怎样办

[ 本帖最后由 eight 于 2007-8-3 15:31 编辑 ]
发表于 2007-8-4 16:44 | 显示全部楼层
help fprintf
发表于 2007-8-4 22:37 | 显示全部楼层
书是死的,人是活的:
  1. str=['']
  2. for i=1:8
  3.     str=[str,'%10.3f ']
  4. end
  5. str=[str '\n']
复制代码

还有其他矩阵扩维不用循环的方法,不过这个是最普遍和广义的方式。

[ 本帖最后由 bainhome 于 2007-8-4 22:38 编辑 ]

评分

1

查看全部评分

发表于 2007-8-6 14:42 | 显示全部楼层
原帖由 shanlihong 于 2007-8-3 15:21 发表
辛苦 花如月和 eight了:handshake
再问个问题:
若想一行输出20个数,fprinft输出格式
fprintf(fid_out,'%4d。。。%d4',A); 省略号里我得写20个%d吗,查了一些书 都找不到该怎样办


bainhome兄说得没错,其实就一个维数扩充命令 repmat 就可以了
发表于 2007-8-8 16:22 | 显示全部楼层
原帖由 home96 于 2007-8-1 20:09 发表
for j=1:5
    pp=[];
    for i=1:j+1
        a=i+1;
        b=i*i;
        c=[a b;a+b b-a];
        pp=[pp;c];
   end
   pp
end
  可以保存j分别为1,2,3,4,5时c矩阵的值



我运行了下各位的代码,感觉就这个结果对,其他人的运行后没有输出i=1 and j=1时候的值[2,1;3,-1].
发表于 2007-8-8 16:25 | 显示全部楼层
原帖由 花如月 于 2007-8-1 17:33 发表
单元数组的方式
A=cell(1,5);
for j=1:5
   for i=1:j+1
       a=i+1;
       b=i*i;
       c=[a b;a+b b-a];
   end
A{j}=c
end



我运行后输出莫名奇妙的矩阵,我matlab的版本是7.1:@o

[ 本帖最后由 wondersoul 于 2007-8-8 16:32 编辑 ]
未命名.bmp
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-16 03:54 , Processed in 0.080564 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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