【发布时间】:2015-12-02 23:38:38
【问题描述】:
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 在这里使用了什么样的疯狂规则?
【问题讨论】:
-
我不明白你的实际问题是什么?你具体有哪些不明白的代码?
-
在您提供的引用之后有一种解释:“MATLAB 将索引数组的缺失元素视为存在并设置为零”。我说“有点”是因为他们忽略了 Matlab 在句子后面的示例中切换到线性索引的事实:
C = logical([B(:);0;0;0]);和isequal(A(C),A(B)) == true。 -
您可以将其视为 Matlab 正在应用 隐式
find:A(find(B))。 (我并不是说 Matlab 在内部这样做;但在功能上它是等价的)。隐含的find处理了两个可能令人惊讶的问题:它线性化了索引数组B,并选择了true条目的整数索引(使得缺少一些false条目并不重要)跨度> -
对,我没有意识到它正在线性化数组。多么明智的行为……