MATLAB逻辑索引:a(find(b <1))= 0,a(b(b <1))= 0?

时间:2014-02-13 15:20:35

标签: matlab indexing

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

第一个表达式,即

a(find(b<1)) = 0

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

a(b(b<1)) = 0

2 个答案:

答案 0 :(得分:3)

没有

a(b<1) = 0

做同样的事情。

b(b<1)

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

答案 1 :(得分:1)

find返回元素值的实际索引小于1.另一方面,b<1返回长度等于b的向量,元素满足条件时为0,对于那些不填补填充条件。 假设你有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<1返回逻辑数组,find(b)返回元素满足条件的索引。