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