如果你给定的矩阵是一个mn的矩阵A,要从中提取k1,k2,kj(j<m)行构成一个新矩阵,只要用指令
V=[k1,k2,kj]
B=A(V,:)就可以了。
学MATLAB一定要看帮助的~
文件输入输出有很多种方式 很多种类型 对应帮助文档'File I/O'
就你说的问题来举例吧
如果你的输入文件中不含其它非法码字而且格式规整
就是说你的输入文件完全符合要求
可以用'textread' 读入文件后再进行数据处理
现有文件 atxt 记录的一个数据库 内容为某物理实验
第1行给定一个参数N 为记录的总数量
以下2至N+1行分别为 矩阵第X行 矩阵第Y列 时间T 距离S
假设atxt内容如下
5
0 1 1 1
2 5 4 9
3 10 7 6
1000 3 8 4
825 923 245 953
reading=textread('D:\MATLAB7\work\atxt');
则reading就会形成一个N+1行4列的矩阵
reading =
10e+003
00050 0 0 0
0 00010 00010 00010
00020 00050 00040 00090
00030 00100 00070 00060
10000 00030 00080 00040
08250 09230 00025 00095
再进行处理就可以了
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加格式转换
修改:
是要找到btxt种对应的atxt中的数据然后进行写入是么?
系统函数一般都比较死板的 自己编吧 就是一个查找函数
量不大的话直接for+for 平方级的时间量
量大的话 如果数据有序就用折半查找
假设btxt内容如下:
0 1
2 5
3 7
1000 3
如果查找到对应数据 就写在后面 没查到就在后面写-1
reading1=textread('D:\MATLAB7\work\atxt');
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\btxt');
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\ctxt',reading2,' ');
运行结果存在ctxt里了:
0 1 1 1
2 5 4 9
3 7 -1 -1
1000 3 8 4
1、打开matlab,在命令行窗口中输入a=[1 2 3 4;4 5 6 7;1 2 3 4],按回车键创建一个3行4列的矩阵。
2、如果我们想获取矩阵第2行第3列的数据,输入a(2,3)。
3、想获取矩阵第3列的第一个和第三个,输入a([1 3],3)。
4、想获取矩阵某列的连续数据,可以使用a(1:2,3),获取第3列第1个到第2个数据。
5、使用a(2:end,3)获取第3列,第2个到最后一个数据,根据需要获取矩阵数据即可。
Sub 试一试()
H1 = 1
H2 = Sheets(1)Cells(65536, 1)End(xlUp)Row
For H = H1 To H2
Sheets(2)Cells(H + 1, 1) = Sheets(1)Cells(H, 1)
Sheets(2)Cells(1, H + 1) = UCase(Sheets(1)Cells(H, 1))
Next
L1 = 2
L2 = Sheets(1)Cells(1, 256)End(xlToLeft)Column
Sheets(2)Select
For H = H1 To H2
For L = L1 To L2 Step 2
字母 = Sheets(1)Cells(H, L)
LL = ApplicationWorksheetFunctionMatch(字母, Range(Cells(H1, L1), Cells(H1, L2)), 0) + H1
Sheets(2)Cells(H + 1, LL) = Sheets(1)Cells(H, L + 1)
Next
Next
End Sub
A=rand(420,5);%%假设A是420行5列的数据
B=zeros(100,5);%%%取B为100行5列的0矩阵
for i=1:floor(420/100)+1
B(20(i-1)+1:20(i-1)+20,:)=A(100(i-1)+1:100(i-1)+20,:);%%每隔100行赋值给B
end
如果你的不超过200行的话,那么B就是40行,你把B=zeros(100,5)改成zeros(40,5)就可以了
当然循环也得变一下~~~我这里是按420行数据搞的
使用a(M,N)可以提取矩阵a中符合M,N要求的部分
最简单是M,N都是标量,就是一个数例如
a(1,1) a(2,3)分别返回a矩阵1行1列的单元 和 2行3列的单元
M,N还可以是矢量,例如
a([1 2 3 4],[2 3]) 返回 1 2 3 4行 2 3 列的数据
这里还有通配的技巧,例如
a(1,:)就是返回a矩阵第一行的所有数据等效于a(1,1:end)或a(1,1:size(a,2))
M,N矢量还可以是不连续的,不是单调的,或者有重复的,例如
a(1:2:end,:) a(2:2:end,:)分别提取矩阵a的奇数行和偶数行数据重新组成矩阵
a(end:-1:1,:) a(:,end:-1:1)分别返回a矩阵行倒序和列倒序的矩阵
总之matlab通过的下标提取矩阵部分是很灵活的
假设你要提取矩阵a第n列的数据,使用a(:,n)就可以了
如果是要提取第n列前10个数据使用a(1:10,n)就可以了
最简单是M,N都是标量,就是一个数例如
a(1,1)
a(2,3)分别返回a矩阵1行1列的单元
和
2行3列的单元
M,N还可以是矢量,例如
a([1
2
3
4],[2
3])
返回
1
2
3
4行
2
3
列的数据
这里还有通配的技巧,例如
a(1,:)就是返回a矩阵第一行的所有数据等效于a(1,1:end)或a(1,1:size(a,2))
M,N矢量还可以是不连续的,不是单调的,或者有重复的,例如
a(1:2:end,:)
a(2:2:end,:)分别提取矩阵a的奇数行和偶数行数据重新组成矩阵
a(end:-1:1,:)
a(:,end:-1:1)分别返回a矩阵行倒序和列倒序的矩阵
总之matlab通过的下标提取矩阵部分是很灵活的
假设你要提取矩阵a第n列的数据,使用a(:,n)就可以了
如果是要提取第n列前10个数据使用a(1:10,n)就可以了
以上就是关于如何用程序提取某个矩阵中的几行组成一个新的矩阵全部的内容,包括:如何用程序提取某个矩阵中的几行组成一个新的矩阵、txt 文件导入matlab后,前两列表示矩阵的行和列,后面几列为数据。如:0 1 1 1。如何根据行列提取具体数据、matlab中怎么取一个矩阵的一部分等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)