【问题标题】:logical indexing based on multiple conditions基于多个条件的逻辑索引
【发布时间】:2015-01-14 07:48:29
【问题描述】:

我正在尝试根据多个搜索条件返回一个逻辑向量。我认为这很简单,而且很可能就是这样。

所以我只是尝试一个非常简单的例子。我有一个双精度类型的向量 10 x 1,称为 myVec。如果 myVec 中的元素等于 5 或​​ 8,我希望返回 1,否则返回 0。

myVec
5
3 
8
9
1
8
5
6
7
5

我的结果向量应该如下所示,

Result
1
0
1
0
0
1
1
0
0
1

我已经尝试了以下,

rl = find(myVec == 8 | myVec == 5);
rl = myVec == 8 | myVec == 5;

两次尝试都给出了信息,

错误:等号左侧的表达式不是有效的赋值目标。

更新

这是我正在玩的实际矢量,

 myVec = [3 5 12 34 62 98 45 12 12 64 20 5 5 94 87 21 20]';

这是我尝试使用的代码行,它会引发错误但看起来应该可以工作,

 rl = myVec  == 12 | myVec  == 5 | myVec  = 20;

【问题讨论】:

  • rl = myVec == 8 | myVec == 5;为我工作
  • 你有没有给rl预先分配了一些东西?如果您输入clearvars rl,然后输入第二种方法,您仍然会收到该错误吗?
  • 只是 clearvars rl 仍然得到同样的错误。我关闭了 Matlab 并重新开始,只是运行了更新中显示的两行,同样的错误。 Stewie Griffin 的例子对我有用
  • 您可以尝试在ideone.com 上重新创建结果吗?查看this link 看看它确实有效。
  • 好的,重新启动了我的电脑,它现在可以工作了。不知道为什么。我最终使用了 Stewie Griffin 所示的括号。然后也做了没有括号,它的工作。电脑几天没重启。仍然有点困惑为什么它不起作用

标签: matlab


【解决方案1】:

这应该可以解决问题:

myvec = 1:10;
vec = (myvec == 5 | myvec == 8)
vec =

     0     0     0     0     1     0     0     1     0     0

这在没有括号的情况下也有效,所以还有其他问题。 find 版本给出了元素的索引,也没有错误。实际上,我找不到重现您的错误消息的方法。

【讨论】:

  • 在这种情况下使用( 有什么意义?这不提供任何操作优先级。你的意思是(myvec == 5) | (myvec == 8) 可能吗?
  • 是的,但 IMO 它让您更清楚您要做什么。几乎就像在写 1/2/3(在纸上)时不使用括号一样。严格来说没有必要,但它确实有帮助=P
猜你喜欢
  • 2015-06-06
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多