永发信息网

matlab中 要输出矩阵的坐标和对应的数据分三列输出,例如 A=[21 42;4 5] 如下 1 1 21 1 2 42 2 1 4 2 2 5

答案:1  悬赏:20  手机版
解决时间 2021-11-29 12:26
  • 提问者网友:我一贱你就笑
  • 2021-11-28 17:39
matlab中 要输出矩阵的坐标和对应的数据分三列输出,例如 A=[21 42;4 5] 如下 1 1 21 1 2 42 2 1 4 2 2 5
最佳答案
  • 五星知识达人网友:时间的尘埃
  • 2021-11-28 18:32
有两种方法。
1.将原矩阵相邻三列取出作为新矩阵的行。
a=[1 1 21 1 2 42 2 1 4 2 2 5];%取完前三列再取后三列
k=1;
for i=1:3:12
b(k,:)=a(:,i:i+2);
k=k+1;
end
b运行结果:

2.将原矩阵每隔两列(每三列)取出作为新矩阵的列。
c=[1 1 21 1 2 42 2 1 4 2 2 5];%取一个数中间隔两个数再取一个数
for i=1:3
d(:,i)=c(:,i:3:12)';
end
d
程序见附件。

追问不好意思,我没说清楚,让你理解错了, 我是要将矩阵的数据输出到txt 或者excel中三列的。而且原始矩阵数据量很大追答确实看错了0.0,修改程序如下:
A=[21 42;4 5];
[m,n,data]=find(A);
dst=[m,n,data]; 
dst
save data.txt -ascii dst结果:


生成txt保存内容为:
  1.0000000e+000  1.0000000e+000  2.1000000e+001
  2.0000000e+000  1.0000000e+000  4.0000000e+000
  1.0000000e+000  2.0000000e+000  4.2000000e+001
  2.0000000e+000  2.0000000e+000  5.0000000e+000
追问我想要的是这样的数据格式,我要一行行的按列撤出输出,比如3x4的矩阵,要输出如下
1 1 数据
1 2 数据
1 3 数据
1 4 数据
2 1 数据
2 2 数据
2 3 数据
2 4 数据
3 1 数据
: : 数据追答我改啊改。
A=[21 42;4 5];
[m,n]=size(A);
z=1;
for i=1:m
    for k=1:n
        B(z,:)=[i k A(i,k)];
        z=z+1;
    end
end
B
save data.txt -ascii B运行结果:

绝对可以了。0.0!
追问非常感谢哈,可以输出如下这种的吗
1.0000000e+000 1.0000000e+000 数据
1.0000000e+000 2.0000000e+000 数据
1.0000000e+000 3.0000000e+000 数据
1.0000000e+000 4.0000000e+000 数据追答可以换一种输出方式,输出txt内容均为整数。

A=[21 42;4 5];
[m,n]=size(A);
z=1;
for i=1:m
    for k=1:n
        B(z,:)=[i k A(i,k)];
        z=z+1;
    end
end
fid=fopen('data.txt','wt');%wt是以文本方式写入data.txt
[m,n]=size(B);
for i=1:m
    for j=1:n
        if j==n
            fprintf(fid,'%d
',B(i,j));% %d 整数输出,
换行
        else
            fprintf(fid,'%d ',B(i,j));%  空格
        end
    end
end
fclose(fid);%关闭文件这时txt文件内容都是整数表示,调用时使用 f=load('data.txt')即可。
如果你想前两列按科学技术法表示,只需将“ fprintf(fid,'%d ',B(i,j));% 空格”语句中“%g”改为“%e”即可。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯