逻辑索引:这里发生了什么?
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)
.
我已阅读 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)
.