logical indexing

13 ビュー (過去 30 日間)
Thijs
Thijs 2012 年 3 月 14 日
imagine you have a two matrixes:
a=[1 2 3 4 5 6 7 8 9];
b=[1 0 1 0 1];
how do i use the b matrix as a logical index? I'd expect:
a(b)
ans =
[1 3 5]
but instead i get the error: "Subscript indices must either be real positive integers or logicals."
if I try
a(~b)
ans =
[2 4]
now I could use a(~~b) which does what i want but this seems inelegant. Can anyone suggest a better solution?

採用された回答

Jacob Halbrooks
Jacob Halbrooks 2012 年 3 月 14 日
Use LOGICAL to do the type conversion:
a(logical(b))

その他の回答 (4 件)

Aldin
Aldin 2012 年 3 月 14 日
Here:
for i = 1:5
if b(i) == 1
disp(a(i))
end
end
:)
  6 件のコメント
Aldin
Aldin 2012 年 3 月 14 日
result =
1 3 5
Aldin
Aldin 2012 年 3 月 14 日
Here is another solution:
a(b(1:5)==1)

サインインしてコメントする。


Thijs
Thijs 2012 年 3 月 14 日
a(logical(b)) does what I want. In case anyone else is wondering
  2 件のコメント
Aldin
Aldin 2012 年 3 月 14 日
See above it's similiar with my solution :)
Thijs
Thijs 2012 年 3 月 14 日
true, thanks

サインインしてコメントする。


Onomitra Ghosh
Onomitra Ghosh 2012 年 3 月 14 日
Your "b" matrix is in double. You need to convert that to logical values for logical indexing:
>> a(boolean(b))
ans =
1 3 5

Aldin
Aldin 2012 年 3 月 14 日
but what if you haven't only '1' and '0' in b array. I think it's better my first solution or second &Onomitra Ghosh his code with logical work correctly

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

タグ

タグが未入力です。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by