Matlab-矩阵的索引

原创 2017年01月03日 12:45:15
%% 矩阵的索引
%% 1.Accessing Single Elements (单个数据的索引)
% Syntax
%  A(row, column)
% Example
 A(4, 2)
%% 2.Linear Indexing (线性索引)采用单个角标的方式索引
% matlab 矩阵的实际存储方式
% MATLAB stores matrices and arrays not in the shape that they appear when displayed in the MATLAB Command Window, but as a single column of elements
% matlab 储存矩阵不是像我们看到的那样行列(二维),而是以列储存的
% So, matrix A
% 
% A = [2 6 9; 4 2 8; 3 5 1]
% A =
%      2     6     9
%      4     2     8
%      3     5     1
% is actually stored in memory as the sequence
% 
% 2, 4, 3, 6, 2, 5, 9, 8, 1
% 行列双角标索引与单角标的关系
% A has size [d1 d2]
%  If you supply two subscripts (i, j) representing row-column indices
% A((j-1) * d1 + i) 与 A(i, j) 等价
%% 3.Functions That Control Indexing Style (控制索引方式的函数)
% sub2ind 实现 行列->单角标 的转化
% ind2sub 实现 单角标->行列 的转化
%% 4.Accessing Multiple Elements (索引多个数据)
% Consecutive Elements
A = magic(4);
A(1:3, 2) % 1-3行/2列
% Nonconsecutive Elements
A(1:3:16)
% nonvector (依然按单角标的索引,将 C 中的每一个数据换成 A(C))
C = [1 3 6; 7 9 10];
A(C)
% end 的使用
A(1:3:end) = -10
% Specifying All Elements of a Row or Column (索引全部的行或列)
A(:, 2) % 第二列所有的元素
A(:) % A 所有的元素
%% 5. Using Logicals in Array Indexing (逻辑01在矩阵索引的运用)
% 不同于以上基于值的索引(行列的值/单角标的值->其实最后都会转化为单角标的索引)
% 这种索引是基于索引矩阵中 1 的位置索引的,索引矩阵是 1 的时候,被索引矩阵这个位置的元素才可以被索引
% 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 转化为单角标的索引
% A(B) 与 A(find(B)) 等价

% Example 1
rng(0,'twister');     % Reset the random number generator
A = rand(5);
B = A > 0.5;
A(B) = 0
% A(A > 0.5) = 0

% Example 2 :索引矩阵不与被索引矩阵一样大
A = [1 2 3;4 5 6;7 8 9]
B = logical([0 1 0; 1 0 1])
A(B) 
% 可以理解为: 使用 find 将 B 转化为单角标然后进行索引
% 或理解为: 将 B 补齐
% MATLAB treats the missing elements of the indexing array as if they were present and set to zero, as in array C below
% Add zeros to indexing array C to give it the same number of 
% elements as A.
% B = logical([B(:);0;0;0]);
%% 6.Single-Colon Indexing with Different Array Types 
n = [1 2 3; 4 5 6];
c = {1 2; 3 4};
s = cell2struct(c, {'a', 'b'}, 1);  s(:,2)=s(:,1);
n(:)
c{:}
s(:).a
%% 矩阵索引的注意事项:(索引/赋值成功的标准)
% 1.利用行列索引时,不应超过矩阵的维数
% 2.向量式索引,赋值时,等号左右的元素数量相等 A(5,1:4) = B(5:8)
% 3.向量式索引,赋值时,等号左右的向量的顺序与长度匹配 
% A(1:4, 3, 3:9) = B(5:8, 1:7) 
% ignoring the one scalar subscript 3 忽略标量 3 
% 左边 1:4 对应 右边 5:8 
% 左边 3:9 对应 右边 1:7

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Matlab 矩阵索引

获取矩阵元素 A(row, column) 线性索引 matlab存储矩阵并非以它的形状的形式,而是一个线性元素列,将每一列连接起来。 比如 A = [2 6 9; 4 2 8; ...

MATLAB中的矩阵索引

MATLAB中的矩阵索引 作者:SteveEddins and Loren Shure   译:王茂春   利用矩阵的索引取出原矩阵的子集元素是一种有效的方式。MATLAB的多种索引类型不仅...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

MATLAB中通过矩阵索引值求元素下标以及转为C语言数组下标

文章原创,转载请注明出处   MATLAB中矩阵数组的下标是从1开始计数的而C语言或者C++之中则是从0开始的,而且MATLAB中矩阵的单个索引值访问时是按列方向计数的,而C/C++中则是按行方向...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)