我已阅读有关逻辑索引的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)的矩阵。但显然它不是!!我
有人可以告诉我最后一行发生了什么。
答案 0 :(得分:2)
如果val
的所有元素都是零(实际上是逻辑false
,或者您会收到错误),那么aa
的{{1}}索引将不会返回任何内容(正如你指出的那样)。所以当你做整行时
val
它本质上是将任何事物的反转赋予任何东西,因此它不会做任何事情,应该保持aa(val) = ~aa(val)
不变。请注意,aa
已应用于~
而不是aa(val)
本身,因此会将空矩阵val
反转,然后将其分配给空矩阵aa(val)