逻辑索引:这里发生了什么?

时间:2015-10-12 13:06:10

标签: matlab matrix-indexing

我已阅读有关逻辑索引的this文档,但它并未澄清我的问题。
我有这行代码:
y = rand(20,3); aa= unidrnd(2,20,3) - 1; val = ( aa & y<1.366e-04) | (~aa & y<8.298e-04); aa(val) = ~aa(val);
我无法理解最后一行aa(val) = ~aa(val);发生了什么。 类似的问题被问到here,但它没有具体回答逻辑索引的问题或逻辑值所暗示的含义。
代码运行时,val's元素为零 这是一个棘手的部分,如果我只运行aa(val)~aa(val),我会Empty matrix: 0-by-1。但如果我运行整行aa(val) = ~aa(val);,我会得到一个矩阵aa(0&#39; s和1&#39; s,20x3)。
'~'正在执行值的反转吗?这意味着它应该分配一个1&#39; s(20x3)的矩阵。但显然它不是!!我 有人可以告诉我最后一行发生了什么。

1 个答案:

答案 0 :(得分:2)

如果val的所有元素都是零(实际上是逻辑false,或者您会收到错误),那么aa的{​​{1}}索引将不会返回任何内容(正如你指出的那样)。所以当你做整行时

val

它本质上是将任何事物的反转赋予任何东西,因此它不会做任何事情,应该保持aa(val) = ~aa(val) 不变。请注意,aa已应用于~而不是aa(val)本身,因此会将空矩阵val反转,然后将其分配给空矩阵aa(val)