谁能向我解释一下这行 MatLAB 代码中发生了什么

Can anyone explain to me what is going on in this line of MatLAB code

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);

我有这个代码。 任何人都可以向我解释这里发生了什么。我试图逐步理解它(调试),但我无法理解在第 4 行中使用反“~”以及使用 'val' 作为索引的目的。

y = rand(20,3); 

创建一个均匀分布的随机数矩阵,y

aa= unidrnd(2,20,3) - 1;

创建一个均匀分布的随机整数矩阵,从 1 到 2,然后减去 1。因此,aa 是 0 和 1 的矩阵。

val = ( aa & y<1.366e-04) | (~aa & y<8.298e-04);

此行检查 aa 为 1AND y<1.366e-04 或 aa 为 0 AND y<8.298e-04 的所有值。请注意,这几乎不会发生,因为 y 是从 0 到 1 的均匀分布数字,所以这种情况不太可能发生。

aa(val) = ~aa(val);

采用之前计算的所有这些情况,如果发生在该索引中,则 aa 从 0 变为 1 或从 1 变为 0。