txt 文件导入matlab后,前两列表示矩阵的行和列,后面几列为数据。如:0 1 1 1。如何根据行列提取具体数据
0111表示:矩阵第0行矩阵第1列时间=1距离=1。如何根据前两列对应的行列号提取相应的时间距离数据呢(假设以上数据保存于a.txt)?同时有另一个txt文档b.txt记...
0 1 1 1表示:矩阵第0行 矩阵第1列 时间=1 距离=1。如何根据前两列对应的行列号提取相应的时间距离数据呢(假设以上数据保存于a.txt)?
同时有另一个txt文档b.txt记录着多个符合前两列数据为0 1(第0行 第1列)的数据,还有0 2 (第0行 第2列)1000 3 (第1000行 第3列)等数据,后两列对应的时间距离为未知,如何将从a.txt中提取出来的时间距离数据赋值给b.txt中对应于某行某列的时间距离变量呢。
谢谢你的帮助,可是下面的程序并没有找到对应于b.txt中的某行某列的时间距离变量。要找到a.txt和b.txt中前两列的行列号对应的值除了Find()还有别的函数吗?可以加速程序运行的函数? 展开
同时有另一个txt文档b.txt记录着多个符合前两列数据为0 1(第0行 第1列)的数据,还有0 2 (第0行 第2列)1000 3 (第1000行 第3列)等数据,后两列对应的时间距离为未知,如何将从a.txt中提取出来的时间距离数据赋值给b.txt中对应于某行某列的时间距离变量呢。
谢谢你的帮助,可是下面的程序并没有找到对应于b.txt中的某行某列的时间距离变量。要找到a.txt和b.txt中前两列的行列号对应的值除了Find()还有别的函数吗?可以加速程序运行的函数? 展开
1个回答
展开全部
学MATLAB一定要看帮助的~
文件输入输出有很多种方式 很多种类型 对应帮助文档'File I/O'
就你说的问题来举例吧
如果你的输入文件中不含其它非法码字而且格式规整
就是说你的输入文件完全符合要求
可以用'textread' 读入文件后再进行数据处理
现有文件 a.txt 记录的一个数据库 内容为某物理实验
第1行给定一个参数N 为记录的总数量
以下2至N+1行分别为 矩阵第X行 矩阵第Y列 时间T 距离S
假设a.txt内容如下
5
0 1 1 1
2 5 4 9
3 10 7 6
1000 3 8 4
825 923 2.45 9.53
reading=textread('D:\MATLAB7\work\a.txt');
则reading就会形成一个N+1行4列的矩阵
reading =
1.0e+003 *
0.0050 0 0 0
0 0.0010 0.0010 0.0010
0.0020 0.0050 0.0040 0.0090
0.0030 0.0100 0.0070 0.0060
1.0000 0.0030 0.0080 0.0040
0.8250 0.9230 0.0025 0.0095
再进行处理就可以了
N=reading(1,1);
for i=2:N+1
X(i-1)=reading(i,1);
Y(i-1)=reading(i,2);
T(i-1)=reading(i,3);
S(i-1)=reading(i,4);
end
从而得到的是X Y T S的4个N位数组
自己运行下吧~ 必要的话在转换的时候还可以给X Y T S加格式转换
修改:
是要找到b.txt种对应的a.txt中的数据然后进行写入是么?
系统函数一般都比较死板的 自己编吧 就是一个查找函数
量不大的话直接for+for 平方级的时间量
量大的话 如果数据有序就用折半查找
假设b.txt内容如下:
0 1
2 5
3 7
1000 3
如果查找到对应数据 就写在后面 没查到就在后面写-1
reading1=textread('D:\MATLAB7\work\a.txt');
N=reading1(1,1);
for i=2:N+1
X1(i-1)=reading(i,1);
Y1(i-1)=reading(i,2);
T1(i-1)=reading(i,3);
S1(i-1)=reading(i,4);
end
reading2=textread('D:\MATLAB7\work\b.txt');
N2=size(reading2);
for i=1:N2(1)
X2(i)=reading2(i,1);
Y2(i)=reading2(i,2);
end
for i=1:N2(1)
flag=true;
for j=1:N
if (X2(i)==X1(j) && Y2(i)==Y1(j))
reading2(i,3)=T1(j);
reading2(i,4)=S1(j);
flag=false;
end
end
if (flag)
reading2(i,3)=-1;
reading2(i,4)=-1;
end
end
dlmwrite('D:\MATLAB7\work\c.txt',reading2,' ');
运行结果存在c.txt里了:
0 1 1 1
2 5 4 9
3 7 -1 -1
1000 3 8 4
文件输入输出有很多种方式 很多种类型 对应帮助文档'File I/O'
就你说的问题来举例吧
如果你的输入文件中不含其它非法码字而且格式规整
就是说你的输入文件完全符合要求
可以用'textread' 读入文件后再进行数据处理
现有文件 a.txt 记录的一个数据库 内容为某物理实验
第1行给定一个参数N 为记录的总数量
以下2至N+1行分别为 矩阵第X行 矩阵第Y列 时间T 距离S
假设a.txt内容如下
5
0 1 1 1
2 5 4 9
3 10 7 6
1000 3 8 4
825 923 2.45 9.53
reading=textread('D:\MATLAB7\work\a.txt');
则reading就会形成一个N+1行4列的矩阵
reading =
1.0e+003 *
0.0050 0 0 0
0 0.0010 0.0010 0.0010
0.0020 0.0050 0.0040 0.0090
0.0030 0.0100 0.0070 0.0060
1.0000 0.0030 0.0080 0.0040
0.8250 0.9230 0.0025 0.0095
再进行处理就可以了
N=reading(1,1);
for i=2:N+1
X(i-1)=reading(i,1);
Y(i-1)=reading(i,2);
T(i-1)=reading(i,3);
S(i-1)=reading(i,4);
end
从而得到的是X Y T S的4个N位数组
自己运行下吧~ 必要的话在转换的时候还可以给X Y T S加格式转换
修改:
是要找到b.txt种对应的a.txt中的数据然后进行写入是么?
系统函数一般都比较死板的 自己编吧 就是一个查找函数
量不大的话直接for+for 平方级的时间量
量大的话 如果数据有序就用折半查找
假设b.txt内容如下:
0 1
2 5
3 7
1000 3
如果查找到对应数据 就写在后面 没查到就在后面写-1
reading1=textread('D:\MATLAB7\work\a.txt');
N=reading1(1,1);
for i=2:N+1
X1(i-1)=reading(i,1);
Y1(i-1)=reading(i,2);
T1(i-1)=reading(i,3);
S1(i-1)=reading(i,4);
end
reading2=textread('D:\MATLAB7\work\b.txt');
N2=size(reading2);
for i=1:N2(1)
X2(i)=reading2(i,1);
Y2(i)=reading2(i,2);
end
for i=1:N2(1)
flag=true;
for j=1:N
if (X2(i)==X1(j) && Y2(i)==Y1(j))
reading2(i,3)=T1(j);
reading2(i,4)=S1(j);
flag=false;
end
end
if (flag)
reading2(i,3)=-1;
reading2(i,4)=-1;
end
end
dlmwrite('D:\MATLAB7\work\c.txt',reading2,' ');
运行结果存在c.txt里了:
0 1 1 1
2 5 4 9
3 7 -1 -1
1000 3 8 4
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询