文档

矩阵索引

访问单个元素

在一个矩阵中引用的特定元素,使用以下语法,其中指定其行和列数一个是矩阵的变量。始终指定该行第一列和第二:

(行、列)

例如,对于一个4乘4的魔法正方形一个,

A =魔法(4)A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

你会在4一行访问元素,第2列

A(4,2) ans = 14

对于具有两个以上维度的数组,在后面指定附加索引指数。参见节多维数组

线性索引

你可以参考一个MATLAB的元素®与单个标矩阵A(k)的。MATLAB存储矩阵和它们出现在MATLAB命令窗口显示当形状的阵列,而是作为元素的单个列。此单个列由所有从矩阵中的列的,每个附加到最后。

因此,矩阵一个

A = [2 6 9;4 2 8;1 . A = 6 6 9 4 2 8 3 5

实际存储在存储器中作为顺序

2,4,3,6,2,5,9,8,1

在第3行的元素,矩阵的第2列一个(值=5)也可确定为实际的存储序列元件6。要访问这个元素,你必须使用标准的选择A(3,2)语法,也可以使用A(6),其被称为线性索引

如果提供更多的下标,MATLAB计算的索引根据你分配给阵列的尺寸的存储列。例如,假设象二维阵列一个有大小(d1 d2),其中d1数组中的行数和d2是列数。如果你提供两个下标(i, j)代表行 - 列指数,偏移量是

(J-1)* D1 + I

鉴于表达A(3,2),MATLAB计算偏移一个的存储列(2-1)* 3 + 3,或6。递减计数在列六个要素访问值5

功能控制索引风格

如果你有行 - 列标,但要使用线性索引来代替,您可以使用转换为后者sub2ind功能。在3×3矩阵一个在上一节中,sub2ind将(3,2)的标准行列索引更改为的线性索引6:

A = [2 6 9;4 2 8;3 5 1];线性指数= sub2ind(size(A), 3,2

要获得行列相当于线性指标,使用ind2sub功能:

[行山口] = ind2sub(尺寸(A),6)行= 3栏= 2

分配给元素外数组界限

当您为数值数组边界之外的元素赋值时,MATLAB会扩展数组以包含这些元素并填充缺少的值0

的边界外的元素赋值一个

A =魔法(4);A(3,5)= 7 A = 16 2 3 13 0 5 11 10 8 0 9 7 6 12 7 4 14 15 1 0

当扩展结构和单元阵列,MATLAB填充一个空值未编址的元件。MATLAB填充具有分类阵列未编址的元件<未定义>。对于日期时间数组,MATLAB用NaT(非时间)填充未寻址的元素。

如果您尝试引用元素赋值语句右侧的阵列外,MATLAB抛出一个错误。

测试= A(7,7)索引超过矩阵维数。

访问多个元素

对于4×4矩阵一个如下所示,可以计算在第四列中的元素的总和一个通过输入

A =魔法(4);A(1,4)+ A(2,4)+ A(3,4)+ A(4,4)

您可以使用冒号操作符来减小这个表达式的大小。包含冒号的下标表达式指的是矩阵的一部分。表达式

(1: m, n)

引用行中的元素1通过的列n矩阵的一个。使用这个符号,可以计算的第四列的和一个更简洁:

总和(A(1:4,4))

Nonconsecutive元素

指非连续的元件的矩阵,用冒号操作者用的步长值。的m: 3: n在这个表达式中意味着对矩阵中的每一个第三个元素进行赋值。注意,这个例子使用了线性索引:

B =一个;B(1:3:16) = -10 B = -10 2 3 -10 5 11 -10 8 9 -10 6 12 -10 14 15 -10

MATLAB支万博1manbetx持一种数组索引类型,它使用一个数组作为另一个数组的索引。您可以根据索引数组中元素的值或位置建立这种类型的索引。

下面是基于值的索引,其中阵列的示例B指数为元素1,3.,6,710的数组一个。在这种情况下,数字的数组B指定的预定元件一个:

A = 5 10 15 20 25 30 35 40 45 50 B = [1 3 6 7 10];A(B) ans = 5 15 30 35 50

如果你索引一个向量和另一个向量,索引向量的方向作为输出:

A(B') ans = 5 15 30 35 50 A1 = A';A1(B) ans = 5 15 30 35 50

如果指数与一nonvector一个向量,指数的形状荣幸:

C = [1 3 6;7 9 10];A(C) ans = 5 15 30 35 45 50

END关键字

MATLAB提供关键字结束指定在阵列的特定维度的最后一个元素。这个关键字可以在情况你的程序不知道有多少行或列中有一个矩阵是有用的。您可以替换前面的例子与表达

B(1:3:结束)= -10

请注意

关键字结束在MATLAB几个含义。它可以用于如以上所解释,或终止的代码条件块如如果块,或终止嵌套函数。

指定行或列的所有元素

冒号本身指的是所有矩阵的行或列中的元素。使用以下语法,您可以计算一个4×4 magic square的第二列中所有元素的和一个:

总和(A(:,2))ANS = 34

通过使用结肠与线性索引,可以参考在整个矩阵的所有元素。这个例子中显示了所有矩阵的元素一个,按按列顺序返回:

A(:) ANS = 16 5 9 4。。。12 1

在使用数组索引逻辑值

逻辑数组索引指定数组的元素一个根据他们的位置在索引数组中,B,而不是他们的价值。在这掩蔽操作类型,每真正作为位置索引到阵列被访问的索引阵列中的元素被处理。

在下面的例子中,B是逻辑1和逻辑零矩阵。这些元素中的位置B确定一个由表达式被指定(B):

A = [1 2 3;4 5 6;7 8 9] A = 1个2 3 4 5 6 7 8 9 B =逻辑([0 1 0 1 0 1 0 0 1])B = 3×3逻辑阵列0 1 0 1 0 1 0 0 1的(B)ANS = 4 2 6 9

因为它返回非零元素的线性索引函数可以是与逻辑阵列有用B,从而有助于解释(B):

求(B) ans = 2 4 8 9

逻辑索引 - 实施例1

此示例创建逻辑数组B它满足条件A> 0.5,并使用中1的位置B指数为一个:

rng(0,“旋风”);%重置随机数生成器A = rand(5);B = A > 0.5;A(B) = 0 A = 0 0.0975 0.1576 0.1419 0 0 0.2785 0 0 4218 0.0357 0 1270 0 0 0 0 0 0 0 0.4854 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

一种更简单的表达方式是

A(A >。5)= 0

逻辑索引 - 实施例2

下一个示例突出显示了使用逻辑索引将非素数设置为magic square中的质数位置0:

A =魔法(4)A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 B = isprime(A)B = 4×4个逻辑阵列0 1 1 1 1 1 0 0 0 1 0 0 00 0 0 A(〜B)= 0;%逻辑索引A A = 0 2 3 13 5 11 0 0 0 7 0 0 0 0 0 0
找到(B)ANS = 2 5 6 7 9 13

逻辑索引具有较小的阵列

在大多数情况下,该逻辑索引阵列应具有相同的数量的元素被索引到阵列的,但这不是必需的。索引阵列可以具有更小的(但不大于)的尺寸:

A = 1 2 3;4 5 6;7 8 9 B =逻辑([0 1 0;2)逻辑数组(1)(2)逻辑数组(1)(2)逻辑数组(1)(2)逻辑数组(2)逻辑数组(1

MATLAB把索引阵列的缺失的元素,好像他们是存在并设置到零,如在阵列C下图:

%添加零来索引列C给它相同数量%的元素如A. C =逻辑([B(:); 0; 0; 0]);ISEQUAL(numel(A),numel(C))ANS =逻辑1个A(C)ANS = 4 7 8

单冒号索引不同数组类型

当索引为使用单个结肠标准MATLAB阵列,MATLAB返回一个列向量(见可变n,下同)。当索引为使用单个冒号的结构或单元阵列,会得到一个逗号分隔的列表(见访问数据的结构数组访问单元格数组中的数据想要查询更多的信息。)

创建三个类型的数组:

n = [1 2 3;4 5 6];c = {1 2;3 4};s = cell2struct(c, {'a', 'b'}, 1);(:, 2) =年代(:1);

使用单冒号索引:

n (:) c{:}(:)。参考译文:ans = ans = 1 1 1 4 ans = 2 3 2 5 ans = ans = 3 2 1 6 ans = 4 2

索引上分配

当从一个矩阵分配值到另一个矩阵时,您可以使用本节中介绍的任何索引样式。矩阵分配语句也有以下要求。

在分配A(J,K,...)= B(M,N,...),标J,K,,N,等可以是标量、向量或数组,条件是:

  • 指定标数B,不包括后下标等于1,不超过ndims(B)

  • 指定的非标量下标的数目一个等于指定的非标量下标的数目B。例如,A(5,1:4,1,2)= B(5:8)是有效的,因为等式的两边用一个非标量标。

  • 所有非标量下标的顺序和长度指定一个匹配指定非标量下标的顺序和长度B。例如,A(1:4,3,3:9)= B(5:8,1:7)是有效的,因为等式的两边(忽略了一个标标3.)使用4元件标后面是7-元件标。

相关话题