【问题标题】:Logical indexing: What is going on here?逻辑索引:这里发生了什么?
【发布时间】:2015-10-12 13:06:09
【问题描述】:

我已阅读有关逻辑索引的 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 和 1,20x3)。
'~' 正在执行值的反转,对吗?这意味着它应该分配一个 1 (20x3) 的矩阵。但显然不是!我
谁能告诉我最后一行发生了什么。

【问题讨论】:

  • 真的,你刚才在上一个问题中问过我这个问题
  • 这里提出的问题更具体我相信@AnderBiguri
  • 我将您链接到一个帖子,并在 cmets 中进行了解释。问题有点不同,不过,这只是对 Matlab 索引的基本误解,我确实将您链接到一个解释该问题的问题
  • 是的,我阅读了您发给我的链接。我确实从中得到了很多信息,但这还不够。无论如何,我确实找到了更多文档并阅读了它们,但没有一个可以澄清我的疑问。因此,如您所见,这个问题更具针对性。

标签: matlab matrix-indexing


【解决方案1】:

如果val 的所有元素都为零(实际上是逻辑falses 否则您会收到错误),那么通过val 索引aa 将不会返回任何内容(正如您所指出的)。所以当你做整行时

aa(val) = ~aa(val)

它本质上是将无的倒数分配给无,因此它不做任何事情并且应该返回 aa 不变。请记住,~ 应用于aa(val) 而不是val 本身,因此它将空矩阵aa(val) 反转,然后将其分配给空矩阵aa(val)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2010-12-14
    • 2017-11-14
    相关资源
    最近更新 更多