fanzhenjie 发表于 2011-5-16 13:59

问一下矩阵分割和分别输出的问题

比如我有一个100*100的矩阵,想分割成4*4的小矩阵,然后单独输出没个小矩阵文档TXT,在单独输出的文档中,要包括X,Y坐标。
a=rand(100,100);
for m=0:24
forn=0:24
b(m,n)=a(m*4:(m+1)*4,n*4:(n+1)*4);
end
end
不知道哪儿错了,后面还想输出25*25个TXT文档,其中要包含有原来的XY坐标

meiyongyuandeze 发表于 2011-5-16 14:55

楼主直接用角标+冒号操作就可以实现你的要求吧。
看楼主的程序里,有b(0,0)这项,matlab中矩阵的默认开始好像是1吧!

fanzhenjie 发表于 2011-5-16 15:12

本帖最后由 fanzhenjie 于 2011-5-16 15:19 编辑

回复 2 # meiyongyuandeze 的帖子

恩,我改了一下,还是不行:
a=rand(100,100);
for m=1:25
forn=1:25
b(m,n)=a(m*4-3:m*4,n*4-3:n*4);%改为b=a(m*4-3:m*4,n*4-3:n*4)只输出了最后一个小矩阵
end
end
这样改了还是不行呀,我还想把每个小矩阵带并包括原来XY坐标值用TXT文档分别输出,就是输出很多不同文件名的TXT文档,每个文档中包括每个小矩阵中对应的矩阵值及原来a中的横竖坐标值,就是相当于最初矩阵a表示一个比较大的平面,分割成小块小块的小面元后,每个小面元再重新用TXT文档输出,

meiyongyuandeze 发表于 2011-5-16 23:10

回复 3 # fanzhenjie 的帖子

按照自己的理解写了下a=rand(100,100);
>> b=mat2cell(a,4*ones(1,25),4*ones(1,25));
>> b{1,1}
ans =
    0.0226    0.0579    0.1089    0.8229
    0.9235    0.7603    0.1709    0.3578
    0.2202    0.6035    0.4224    0.1886
    0.6964    0.1513    0.9241    0.8661
>> b{1,2}
ans =
    0.1608    0.2470    0.4090    0.1109
    0.9698    0.4888    0.9847    0.0251
    0.7053    0.6909    0.4901    0.5955
    0.5526    0.8640    0.3462    0.4890上面生成b是25*25的一个矩阵,应该是要的矩阵吧,自己是这么理解。
具体的你可以参见 help mat2cell

qibbxxt 发表于 2011-5-17 11:04

回复 1 # fanzhenjie 的帖子

这个问题不难,用下面讲师的方法是可以实现的,但是请你把具体写成什么样的文件格式描述清楚,大家才可以帮助你啊

fanzhenjie 发表于 2011-5-17 11:20

回复 4 # meiyongyuandeze 的帖子

我自己写了一下,把100*100分成10*10的100小矩阵,输出时要输出对应原来的坐标点,相当于每行代表X,Y,Z坐标,我不知到哪儿错了
c=rand(100,100);
for i=1:10
for j=1:10
=meshgrid(i*10-9:i*10,j*10-9:j*10)
results=;
fid=fopen(strcat('fan_',num2str(i),'_',num2str(j),'.txt'),'a');
fprintf(fid,'%5.3f %5.3f %5.3e \n',results);
fclose(fid);
end
end

fanzhenjie 发表于 2011-5-17 14:17

fanzhenjie 发表于 2011-5-17 11:20 static/image/common/back.gif
回复 4 # meiyongyuandeze 的帖子

我自己写了一下,把100*100分成10*10的100小矩阵,输出时要输出对应原来 ...

我最后得到的每个TXT文档都是三列数据,第一列表面原来的横坐标,第二列表示原来的纵坐标,第三列表示原来的值,相当于一个点的,XYZ坐标,嘿嘿!但不知道怎么操作!

qibbxxt 发表于 2011-5-17 14:56

回复 6 # fanzhenjie 的帖子

function matr = matrixDispose(n)
if nargin == 0
    n = 10;
end
= meshgrid(1:n*n); % 生成位置
matr{3} = rand(n*n);         % 生成数据
= ind2sub(,1:n*n);
prematr = cellfun(@(x)mat2cell(x,n+zeros(1,n),n+zeros(1,n)),matr,'Uni',0);
arrayfun(@(x)saveTxt(I(x),J(x),...
    '),1:n*n);
function saveTxt(i,j,results)
fid=fopen(sprintf('fan_%d_%d.txt',i,j),'a');
fprintf(fid,'%5.3f %5.3f %5.3e \n',results);
fclose(fid);这段代码应该可以实现的

fanzhenjie 发表于 2011-5-17 15:35

回复 8 # qibbxxt 的帖子

十分感谢,我试试呀!

fanzhenjie 发表于 2011-5-17 15:40

您好,我用下面程序如单独输出可以弄Z值就是正确的,想把原来对应的,XY坐标都添加进去然后分别输出,即,TXT文档中都是n行三列的那种,不知道哪儿写的有问题呀!
c=rand(100,100);
for i=1:10
for j=1:10
=meshgrid(i*10-9:i*10,j*10-9:j*10);%这行应该有错吧
results=;%这行不知道如何把对应的XY也写进去,然后输出
fid=fopen(strcat('fan_',num2str(i),'_',num2str(j),'.txt'),'a');
fprintf(fid,'%5.3f %5.3f %5.3e \n',results);
fclose(fid);
end
end

qibbxxt 发表于 2011-5-17 16:39

回复 10 # fanzhenjie 的帖子

c=rand(100,100);
for i=1:10
    for j=1:10
      =meshgrid(i*10-9:i*10,j*10-9:j*10);%这行应该有错吧
      results=,1)]';%这行不知道如何把对应的XY也写进去,然后输出
      fid=fopen(strcat('fan_',num2str(i),'_',num2str(j),'.txt'),'a');
      fprintf(fid,'%5.3f %5.3f %5.3e \n',results);
      fclose(fid);
    end
end

fanzhenjie 发表于 2011-5-18 16:20

回复 11 # qibbxxt 的帖子

明白了,十分感谢呀
页: [1]
查看完整版本: 问一下矩阵分割和分别输出的问题