【问题标题】:MATLAB logical indexing: Is a(find(b<1)) = 0, the same as a(b(b<1)) = 0?MATLAB逻辑索引:是a(find(b<1)) = 0,和a(b(b<1)) = 0一样吗?
【发布时间】:2014-02-13 15:20:35
【问题描述】:

正如我的问题所暗示的,我的目标是找到 b 中小于 1 的值的所有索引,并将 a 中的这些相同索引设置为零。

第一个表达式,即

a(find(b<1)) = 0

做我想做的事,但 matlab 建议我使用逻辑索引来提高性能。第二个表达式做同样的事情吗?

a(b(b<1)) = 0

【问题讨论】:

  • @RopertP 我同意你的观点。但是,如果人们很乐意回答并提供澄清,那么我很难理解问题所在。不要试图对后一点无可救药。如果您或任何人想更详细地解释您的观点的重要性,我将不胜感激。

标签: matlab indexing


【解决方案1】:

没有。

a(b<1) = 0

做同样的事情。

b(b<1)

返回b 的值,其中b 小于1。 这不是一个逻辑值(它应该用于逻辑索引),并且它的大小可能与 b 不同(除非 所有 值都小于 1)。

【讨论】:

  • 我希望没关系我对你的答案做了一个小的编辑..?如果没有,可以使用回滚功能。
  • @RobertP。似乎编辑它是一件好事 - 我害怕在某个地方分心:>
【解决方案2】:

find 返回元素值的实际索引值小于 1。另一方面,b&lt;1 返回长度等于 b 的向量,对于满足条件的元素具有 0,对于不满足条件的元素具有 1填充条件。 假设,你有 b 向量:

b = [2 3 4 5 6 -1 9 -2]
find(b<2)
ans =

     6     8
>> b<2

ans =

     0     0     0     0     0     1     0     1
 b(b<2)

ans =

    -1    -2
a(b(b<1)) =0
Subscript indices must either be real positive integers or logicals.

所以两个操作都不一样。 b&lt;1返回逻辑数组,find(b)返回满足条件的元素索引。

【讨论】:

    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2015-03-20
    • 2014-10-12
    • 1970-01-01
    • 2017-01-21
    相关资源
    最近更新 更多