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

Logical indexing: What is going on here?

我已阅读 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); 中发生的事情。 有人问了一个类似的问题 但它没有具体回答逻辑索引的问题或逻辑值的含义。
当代码为 运行 时,val's 个元素为零。
这是棘手的部分,如果我 运行 仅 aa(val)~aa(val) 我得到 Empty matrix: 0-by-1。但是如果我 运行 整行 aa(val) = ~aa(val);,我得到一个矩阵 aa(有 0 和 1,20x3)。
'~' 执行值的反转对吗?这意味着它应该分配一个 1 的矩阵 (20x3)。但显然不是!!我
谁能告诉我最后一行发生了什么。

如果 val 的所有元素都是零(实际上是逻辑 false 否则你会得到一个错误),那么 val 索引 aa 会 return 什么都没有(正如你指出的那样)。所以当你做整行时

aa(val) = ~aa(val)

它本质上是将 nothing 的逆赋值给 nothing,因此它什么都不做,应该 return aa 不变。请记住,~ 应用于 aa(val) 而不是 val 本身,因此它反转空矩阵 aa(val) 然后将其分配给空矩阵 aa(val) .