如何用程序提取某个矩阵中的几行组成一个新的矩阵

如何用程序提取某个矩阵中的几行组成一个新的矩阵,第1张

如果你给定的矩阵是一个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中怎么取一个矩阵的一部分等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9633222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存