Matlab矩阵的索引大全

  1. %% 矩阵的索引  
  2. %% 1.Accessing Single Elements (单个数据的索引)  
  3. % Syntax  
  4. %  A(row, column)  
  5. % Example  
  6.  A(4, 2)  

  7. %% 2.Linear Indexing (线性索引)采用单个角标的方式索引  
  8. % matlab 矩阵的实际存储方式  
  9. % 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  
  10. % matlab 储存矩阵不是像我们看到的那样行列(二维),而是以列储存的  
  11. % So, matrix A  
  12.  
  13. % A = [2 6 9; 4 2 8; 3 5 1]  
  14. % A =  
  15. %      2     6     9  
  16. %      4     2     8  
  17. %      3     5     1  
  18. % is actually stored in memory as the sequence  
  19. %   
  20. % 2, 4, 3, 6, 2, 5, 9, 8, 1  
  21. % 行列双角标索引与单角标的关系  
  22. % A has size [d1 d2]  
  23. %  If you supply two subscripts (i, j) representing row-column indices  
  24. % A((j-1) * d1 + i) 与 A(i, j) 等价  

  25. %% 3.Functions That Control Indexing Style (控制索引方式的函数)  
  26. % sub2ind 实现 行列->单角标 的转化  
  27. % ind2sub 实现 单角标->行列 的转化  

  28. %% 4.Accessing Multiple Elements (索引多个数据)  
  29. % Consecutive Elements  
  30. A = magic(4);  
  31. A(1:3, 2) % 1-3行/2列  
  32. % Nonconsecutive Elements  
  33. A(1:3:16)  
  34. % nonvector (依然按单角标的索引,将 C 中的每一个数据换成 A(C))  
  35. C = [1 3 6; 7 9 10];  
  36. A(C)  
  37. % end 的使用  
  38. A(1:3:end) = -10  
  39. % Specifying All Elements of a Row or Column (索引全部的行或列)  
  40. A(:, 2) % 第二列所有的元素  
  41. A(:) % A 所有的元素  

  42. %% 5. Using Logicals in Array Indexing (逻辑01在矩阵索引的运用)  
  43. % 不同于以上基于值的索引(行列的值/单角标的值->其实最后都会转化为单角标的索引)  
  44. % 这种索引是基于索引矩阵中 1 的位置索引的,索引矩阵是 1 的时候,被索引矩阵这个位置的元素才可以被索引  
  45. % A = [1 2 3; 4 5 6; 7 8 9]  
  46. % A =  
  47. %      1     2     3  
  48. %      4     5     6  
  49. %      7     8     9  
  50. %   
  51. % B = logical([0 1 0; 1 0 1; 0 0 1]);  
  52. % B =  
  53. %      0     1     0  
  54. %      1     0     1  
  55. %      0     0     1  
  56. %   
  57. % A(B)   
  58. % ans =  
  59. %      4  
  60. %      2  
  61. %      6  
  62. %      9  
  63.   
  64. % 这里通过 find 函数将索引矩阵 B 转化为单角标的索引  
  65. % A(B) 与 A(find(B)) 等价  
  66.   
  67. % Example 1  
  68. rng(0,'twister');     % Reset the random number generator  
  69. A = rand(5);  
  70. B = A > 0.5;  
  71. A(B) = 0  
  72. % A(A > 0.5) = 0  
  73.   
  74. % Example 2 :索引矩阵不与被索引矩阵一样大  
  75. A = [1 2 3;4 5 6;7 8 9]  
  76. B = logical([0 1 0; 1 0 1])  
  77. A(B)   
  78. % 可以理解为: 使用 find 将 B 转化为单角标然后进行索引  
  79. % 或理解为: 将 B 补齐  
  80. % MATLAB treats the missing elements of the indexing array as if they were present and set to zero, as in array C below  
  81. % Add zeros to indexing array C to give it the same number of   
  82. % elements as A.  
  83. % B = logical([B(:);0;0;0]);  
  84. %% 6.Single-Colon Indexing with Different Array Types   
  85. n = [1 2 3; 4 5 6];  
  86. c = {1 2; 3 4};  
  87. s = cell2struct(c, {'a', 'b'}, 1);  s(:,2)=s(:,1);  
  88. n(:)  
  89. c{:}  
  90. s(:).a  
  91. %% 矩阵索引的注意事项:(索引/赋值成功的标准)  
  92. % 1.利用行列索引时,不应超过矩阵的维数  
  93. % 2.向量式索引,赋值时,等号左右的元素数量相等 A(5,1:4) = B(5:8)  
  94. % 3.向量式索引,赋值时,等号左右的向量的顺序与长度匹配   
  95. % A(1:4, 3, 3:9) = B(5:8, 1:7)   
  96. % ignoring the one scalar subscript 3 忽略标量 3   
  97. % 左边 1:4 对应 右边 5:8   
  98. % 左边 3:9 对应 右边 1:7  

你可能感兴趣的:(Matlab)