Matlab 矩阵索引

来源:互联网 发布:压缩包for mac 编辑:程序博客网 时间:2024/04/30 16:46

获取矩阵元素

A(row, column)

线性索引

matlab存储矩阵并非以它的形状的形式,而是一个线性元素列,将每一列连接起来。

比如

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

A =

2 6 9

4 2 8

3 5 1

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

所以A(3,2)也为A(6)。

尺寸为[d1 d2]的矩阵A,A(i,j)的线性序号为 (j-1) * d1 + i

与索引形式有关的函数

将行列索引和线性索引转化的函数。sub2ind/ind2sub

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

linearindex = sub2ind(size(A), 3, 2)

linearindex =

6

[row col] = ind2sub(size(A), 6)

row =

3

col =

2

获取多个元素

冒号操作

A = magic(4);

需要:A(1,4) + A(2,4) + A(3,4) + A(4,4)

则:sum(A(1:4, 4))

A(1:4, 4) 提取1到4行,第4列的元素。

非连续元素

从矩阵中获取非连续元素的值。

使用冒号并指定步长。m:3:n,表示从第m个到第n个元素,每3个取一个。

B = A;

B(1:3:16) = -10

B =

-10 2 3 -10

5 11 -10 8

9 -10 6 12

-10 14 15 -10

使用自定索引序列

A = 5:5:50

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

end关键字

在矩阵大小不确定时很有用。

B(1:3:end) = -10

选择某行或者某列所有元素

第二列:A(:, 2)

第二行:A(2,:)

所有:A(:) 以列向量的形式。

使用矩阵的逻辑索引

在选出A矩阵中与B矩阵内非零值位置相同的元素,为一列向量。所以不是根据值来的,而是根据位置来的。

B是一个矩阵由逻辑0和1组成。即B中为非零的位置,就是要选出的元素位置。

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

A =

1 2 3

4 5 6

7 8 9

B = logical([0 1 0; 1 0 1; 0 0 1]);

B =

0 1 0

1 0 1

0 0 1

A(B)

ans =

4

2

6

9

find函数返回B中非零元素的索引,

find(B)

ans =

2

4

8

9

所以也就是选出A中序号为2 4 8 9的元素,组成列向量。

例1

rand('twister', 5489);

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.4854 0 0

0 0 0 0 0

例2

A = magic(4)

A =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

B = isprime(A) %素数

B =

0 1 1 1

1 1 0 0

0 1 0 0

0 0 0 0

A(~B) = 0; % 逻辑索引

A

A =

0 2 3 13

5 11 0 0

0 7 0 0

0 0 0 0

find(B)

ans =

2

5

6

7

9

13

*使用较小的矩阵作为索引矩阵

大多数情况下,逻辑索引矩阵与对象矩阵大小相同,但索引矩阵也可以小于对象矩阵(不能大于)。

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

A =

1 2 3

4 5 6

7 8 9

B = logical([0 1 0; 1 0 1])

B =

0 1 0

1 0 1

isequal(numel(A), numel(B))

ans =

0

A(B)

ans =

4

7

8

MATLAB将索引矩阵中缺少的部分视为0。

以上相当于:

C = logical([B(:);0;0;0]);

isequal(numel(A), numel(C))

ans =

1

A(C)

ans =

4

7

8

单冒号索引

n = [1 2 3; 4 5 6];

c = {1 2; 3 4};

s = cell2struct(c, {'a', 'b'}, 1); s(:,2)=s(:,1);

%cell2struct,将c编入结构中,成员变量为a,b,变量值为c,1为个体排列维数。

对每个使用单冒号索引:

n(:) c{:} s(:).a

ans = ans = ans =

1 1 1

4 ans = ans =

2 3 2

5 ans = ans =

3 2 1

6 ans = ans =

4 2

按索引指定值

当将一个矩阵的值指定给另一个矩阵是,你可以使用任意一种索引方法。

A(J,K,...) = B(M,N,...) JKMN必须是标量,向量或者矩阵。

A中指定元素个数应该与B中指定元素个数相等。

原创粉丝点击