using logical mask in array
이전 댓글 표시
hello! i have this array: C=[1 1 1 2 3 4 5 5 5 5 6 6 6 6 ] and i wana to get the index of array where C=5, i can use res=find(C==5), but i went to use logical masks to improve performance in my code, so can any one tel me how i use logical mask ?? ^^ thanks
답변 (1개)
Image Analyst
2017년 8월 14일
Mask = C==5;
댓글 수: 5
Stephen23
2017년 8월 14일
but Mask=C==5 gives % 0 0 0 0 0 0 1 1 1 1 0 0 0 0 and i wana ; 7 8 9 10 => the idex of element with equales to 5 ??
Jan
2017년 8월 14일
@khaled: You asked for the logical mask explicitly. The logical mask is
C == 5 % [0 0 0 0 0 0 1 1 1 1 0 0 0 0]
In opposite to this [7, 8, 9, 10] are the indices. As you have found out already, logical indexing is faster in general, because Matlab has to check the length of the index vector only, while for the list of indices, each value must be checked to be inside the limits.
Image Analyst
2017년 8월 14일
But khaled, that's what you had originally - the linear indexes, the actual index numbers. You said you wanted logical (true/false) indexes so that's what I gave you. I hope you can understand the illustrative code below:
>> C=[1 1 1 2 3 4 5 5 5 5 6 6 6 6 ]
C =
1 1 1 2 3 4 5 5 5 5 6 6 6 6
>> linearIndexes = find(C == 5)
linearIndexes =
7 8 9 10
>> logicalIndexes = C == 5 % Can be used as a mask
logicalIndexes =
1×14 logical array
0 0 0 0 0 0 1 1 1 1 0 0 0 0
Image Analyst
2017년 8월 15일
khaled's "Answer" moved here:
Yes, thank very much you for the illustration.
Image Analyst
2017년 8월 15일
So, if we're done then could you "Accept" the answer? Otherwise explain what you still need help on.
카테고리
도움말 센터 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!