【问题标题】:Why can an array index be a boolean in MATLAB? [duplicate]为什么数组索引可以是 MATLAB 中的布尔值? [复制]
【发布时间】:2016-06-16 09:45:34
【问题描述】:

我不是一个非常频繁的 Matlab 用户。所以今天,当我收到"Subscript indices must either be real positive integers or logicals." 的消息时,我很想知道。如果我这样做会发生什么

x = [1 2 3];
x(true)
x(false)

我的猜测是 false 被视为 0 而 true 被视为 1,因此 x(true) 应该返回第一个元素,它确实返回了,而 x(false) 应该返回一个错误。它没有。 x(false) 显然返回一个空数组。为什么?

我找不到关于这种相当奇怪的行为的任何参考资料,这就是我在这里问的原因,对不起,如果它是重复的或我应该知道的一些正常行为。

【问题讨论】:

  • Matlab 是解释型语言,如果它把 true 当作 1,false 当作 0,我不会感到惊讶。你试过吗?请记住,matlab 数组从 1 开始(而不是在 C 中从 0 开始)
  • 不是这样的。我找到了答案,我会发布它。
  • @LuisMendo 对here 进行了非常精彩的问答,内容涉及 MATLAB 中所有可能的索引方式

标签: matlab


【解决方案1】:

Matab 很奇怪,但在这种情况下是一个非常简洁的功能。

如果你有x = [1 2 3];,你可以用对应长度的逻辑访问:

  • x([false false true]) 等价于 x(3)
  • x([false false false]) 等价于 x([])
  • x([false true true]) 等价于 x([2 3])

等等

这对于准备一个包含每个数组位置信息的逻辑数组很有用,并且根据逻辑状态来考虑或不考虑这个。

【讨论】:

  • 是的,就是这样。谢谢!还有一点有趣的是x([true true true true]) 会抛出一个错误(这是合乎逻辑的,因为我们试图访问 3 元素数组的第 4 个元素)但 x([true true true false]) 不会。
  • x([true true true false]) 没问题,因为 Matlab 在运行代码之前不会进行任何检查,因此在运行时您不会访问数组的第四个元素。坦克到 glglgl 的好答案
  • 对应长度 不一定。试试x([false true])x([false false true false]) :-)
猜你喜欢
  • 2017-09-14
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
相关资源
最近更新 更多