正如我的问题所示,我的目标是找到b中小于1的所有值的索引,并将这些相同的索引设置为a到零。
第一个表达式,即
a(find(b<1)) = 0
做我想要的,但是matlab建议我使用逻辑索引来提高性能。第二个表达式是否做同样的事情?
a(b(b<1)) = 0
答案 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)
返回元素满足条件的索引。