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!