"使用较小的数组进行逻辑索引"在matlab中

时间:2015-12-02 23:38:39

标签: arrays matlab

matrix indexing的matlab帮助页面说:

  

使用较小数组的逻辑索引

     

在大多数情况下,逻辑索引数组应具有相同的编号   元素作为索引的数组,但这不是一个   需求。索引数组可能更小(但不是更大)   尺寸:

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使用什么样的疯狂规则?

1 个答案:

答案 0 :(得分:0)

要理解这种行为,了解矩阵如何存储在内存中是必要的。 Matlab使用列主要布局存储矩阵。这意味着2d矩阵:

                       A =   1     2     3
                             4     5     6
                             7     8     9

作为一维数组存储在内存中,位于A:

列的下方
A     = { array  = [1  4  7  2  5  8  3  6  9]  
          n_rows = 3
          n_cols = 3                            }

矩阵B:

                        B =  0     1     0
                             1     0     1

以内容存储在内存中:

B     = { array  = [0  1  1  0  0  1]  
          n_rows = 2
          n_cols = 3                            }

让我们将基础表示放在一起:

A.array = [1  4  7  2  5  8  3  6  9] 
B.array = [0  1  1  0  0  1]  

使用逻辑索引,A(B)为您提供[4, 7, 8]如果您想得更深一些,导致不直观结果的是以下组合:(1)Matlab使用列主要布局和(2) )A和B中的列数不同。

注意:我在这里使用伪代码。 A.array不是有效的代码等......

加成: 您可以看到调用reshape命令时会发生什么。底层数据数组不会改变,只是与数据数组相关的n_rows和n_cols。