Matrix Indexing.docx
- 文档编号:4944515
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:10
- 大小:18.46KB
Matrix Indexing.docx
《Matrix Indexing.docx》由会员分享,可在线阅读,更多相关《Matrix Indexing.docx(10页珍藏版)》请在冰豆网上搜索。
MatrixIndexing
MatrixIndexing
矩阵索引
在此页…
访问单个元素
线性索引
控制索引风格函数
访问多个元素
使用逻辑值的数组索引
单冒号使用不同的数组类型的索引
索引的分配
访问单个元素
要引用矩阵中的特定元素,使用下面的语法,其中A是矩阵变量指定的行数和列数。
始终指定的行和列
A(行,列)
例如,对于一个4×4魔方A,
A=magic(4)
A=
162313
511108
97612
414151
您将访问该元素在第4行,第2列的
A(4,2)
ans=
14
对于以上两个维度的数组,可以指定其他索引后的row和column指数。
请参阅MultidimensionalArrays.
线性索引
你可以参考一个MATLAB矩阵的元素用一个下标,A(k)。
MATLAB存储的矩阵和数组的形状,他们在MATLAB命令窗口中显示时的显示,但作为一列元素。
这种单一的列组成的所有的列的矩阵,每一个附加到最后。
因此,矩阵A
A=[269;428;351]
A=
269
428
351
实际上是存储在存储器中,作为序列
2,4,3,6,2,5,9,8,1
在第3行,第2列的矩阵A(值=5)的元素也可以被识别为实际的存储顺序中的元件6。
要访问这个元素,你有选择的使用标准A(3,2)的语法,或者你可以使用A(6),这被称为线性索引。
如果你提供更多的下标,MATLAB计算的存储列的索引,根据你分配给数组的尺寸。
例如,假定一个两维数组,如A具有大小[d1d2],其中d1是在阵列中的行数和d2的列数。
如果您提供的两个下标(i,j)的行列索引的偏移量是
(j-1)*d1+i
给出的表达式A(3,2),MATLAB计算A的存储列偏移量为(2-1)*3+3,或6。
访问计数列中的第六个要素值为5。
控制索引风格函数
如果你有行-列标,但要使用线性索引,你可以转换为后者使用sub2ind函数。
在3×3矩阵A用于在上一节中,sub2ind改变一个标准的行-列索引为(3,2),线性索引为6:
A=[269;428;351];
linearindex=sub2ind(size(A),3,2)
linearindex=
6
为了得到相当于一个线性索引的行列,请使用ind2sub函数:
[rowcol]=ind2sub(size(A),6)
row=
3
col=
2
访问多个元素
对于4×4矩阵A如下所示,也可以将元素A中的第四列的计算总和,通过键入
A=magic(4);
A(1,4)+A(2,4)+A(3,4)+A(4,4)
您可以减少使用冒号运算符的表达式的尺寸。
下标表达式涉及冒号指部分的矩阵。
该表达式
A(1:
m,n)
指1到m行,n列的矩阵A使用这个符号,你可以计算一个更简洁的第四列中的元素的总和:
sum(A(1:
4,4))
不连续的元素
要引用矩阵中的不连续的元素,使用冒号运算符使用的步长值。
m:
3:
n在此表达方式进行分配矩阵中的所有第三个元素。
请注意,本例中使用线性索引:
B=A;
B(1:
3:
16)=-10
B=
-1023-10
511-108
9-10612
-101415-10
MATLAB支持一种类型的数组索引,使用一个数组到另一个数组的索引。
您可以基于这种类型上的值或索引数组中的元素位置的索引。
下面是一个例子其中基于阵列B的值索引阵列A的1,3,6,7和10元素.在这种情况下,数值数组B中指定预定的元素A:
A=5:
5:
50
A=
5101520253035404550
B=[136710];
A(B)
ans=
515303550
如果你与另一向量的向量索引,索引向量的方向的履行输出:
A(B')
ans=
515303550
A1=A';A1(B)
ans=
5
15
30
35
50
如果你的索引与非向量成一个向量,形状的索引履行。
C=[136;7910];
A(C)
ans=
51530
354550
end关键字
MATLAB提供的关键字end指定的最后一个元素的数组在一个特定的维度。
不知道有多少行或列的矩阵,在你的程序的情况下,关键字是有用的。
您可以更换表达式在前面的例子
B(1:
3:
end)=-10
注意:
关键字end在MATLAB中有好几个意思。
它可用于如上面所解释的,或终止一个条件块的代码,如if和for块,或终止的嵌套函数。
指定行或列的所有元素
冒号本身是指一个矩阵的行或列中的所有元素。
使用下面的语法,你可以计算出一个4×4的魔方A的第二列中的所有元素的总和:
sum(A(:
2))
ans=
34
通过使用冒号使用线性索引,你可以参考整个矩阵中的所有元素。
这个例子显示矩阵A的所有元素,返回他们在一列分段顺序:
A(:
)
ans=
16
5
9
4
.
.
.
12
1
使用逻辑值的数组索引
一个合乎逻辑的数组索引指定数组A中的元素位置的索引数组,B,不是他们的值的基础上。
在这种掩码类型的操作,每一个true的元素索引阵列被视为被访问到阵列中的位置索引。
在以下的例子中,B是一个逻辑1和逻辑0的矩阵。
b确定的位置,这些元素在元素的指定的表达式A(B):
A=[123;456;789]
A=
123
456
789
B=logical([010;101;001]);
B=
010
101
001
A(B)
ans=
4
2
6
9
find
Thefind函数可以是与逻辑阵列有用,因为它返回非零元素的线性指数,其中,在B中,从而有助于解释A(B):
find(B)
ans=
2
4
8
9
逻辑索引-例1
此示例创建的逻辑数组B满足A>0.5的条件,并使用在B位置的索引为A:
rng(0,'twister');%Resettherandomnumbergenerator
A=rand(5);
B=A>0.5;
A(B)=0
A=
00.09750.15760.14190
00.278500.42180.0357
0.12700000
000.485400
00000
一个简单的方法来表达,这是
A(A>0.5)=0
逻辑索引-例2
下面的例子强调的素数幻方使用逻辑索引设置非素数为0的位置:
A=magic(4)
A=
162313
511108
97612
414151
B=isprime(A)
B=
0111
1100
0100
0000
A(~B)=0;%逻辑索引
A
A=
02313
51100
0700
0000
find(B)
ans=
2
5
6
7
9
13
用较小阵列的逻辑索引
在大多数情况下,应该有逻辑索引数组元素作为阵列被索引到相同数量的,但是这不是必需。
索引阵列可具有更小的(但不大于)尺寸:
A=[123;456;789]
A=
123
456
789
B=logical([010;101])
B=
010
101
isequal(numel(A),numel(B))
ans=
0
A(B)
ans=
4
7
8
MATLAB对待缺少的元素的索引数组,就好像它们是存在并设置为零,如在下面的阵列C:
%数组C给它相同数量的零的索引
%A的元素。
C=logical([B(:
);0;0;0]);
isequal(numel(A),numel(C))
ans=
1
A(C)
ans=
4
7
8
单冒号使用不同的数组类型的索引
当你到一个标准的MATLAB阵列使用单冒号索引,,MATLAB返回一个列向量(见下面的变量n,)。
当你的索引结构或单元阵列使用单冒号,你会得到一个以逗号分隔的列表(请参阅AccessDatainaStructureArray和AccessDatainaCellArray
创建三种类型的数组:
n=[123;456];
c={12;34};
s=cell2struct(c,{'a','b'},1);s(:
2)=s(:
1);
在每个索引使用单冒号:
n(:
)c{:
}s(:
).a
ans=ans=ans=
111
4ans=ans=
232
5ans=ans=
321
6ans=ans=
42
索引的分配
矩阵为其他矩阵赋值时,您可以使用本节中介绍的任何样式的索引。
矩阵的赋值语句也有以下的要求
在分配A(J,K,...)=B(M,N,...),下标J,K,M,N,等可以是标量,矢量,或阵列,设置所有满足以下的条件:
∙B的下标指定的数量,不包括尾随的下标为1,不超过ndims(B).
∙为A的非标量的下标指明的数目等于指定为B的非标量的下标数.例如,,A(5,1:
4,1,2)=B(5:
8)是有效的,因为双方的方程使用非标量下标相等。
∙A指定的非标量下标的顺序和长度与B指定的顺序和长度的下标为非标量并相匹配.例如,A(1:
4,3,3:
9)=B(5:
8,1:
7)是有效的,因为双方的方程(忽略了一个标量下标3)使用4个元素的下标第7元素的下标。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matrix Indexing