データ分析・上級問題チェック
問題 19 /40
NumPyの次の配列に対して、「array([[1, 2], [5, 6]])」を取得する記述として、正しいものはどれか。
a = np.array(['A', 'B', 'C'])
b = np.array([[1, 2],
[3, 4],
[5, 6]])
選択 1
b[(a == 'A') or (a == 'C')]
選択 2
b[(a == 'A') and (a == 'C')]
選択 3
b[(a == 'A') | (a == 'C')]
選択 4
b[(a == 'A') & (a == 'C')]
解説
選択肢3が正解です。
問題文の以下の配列から、「array([[1, 2], [5, 6]])」を取得する記述を考えます。
a = np.array(['A', 'B', 'C'])
b = np.array([[1, 2],
[3, 4],
[5, 6]])
正解の選択肢3の記述は以下です。
b[(a == 'A') | (a == 'C')]
この[(a == 'A') | (a == 'C')]は、aの配列['A', 'B', 'C']に対して、一致している要素をTrue、一致していない要素をFalseで返します。
「|」は「or」の論理演算子になるため、「'A'と一致している要素、もしくは、'B'と一致している要素」という条件になり、「array([True, False, True])」の真偽値の配列が返ります。
真偽値の配列は、配列から値を取得するときのインデックスとして利用できます。
「array([True, False, True])」を配列bに適用すると、Trueのインデックスと一致する0行目と2行目を取得し、「array([[1, 2], [5, 6]])」が返ります。
選択肢4の「&」は「and」の論理演算子となり、この場合は「'A'と一致している要素、かつ、'B'と一致している要素」という条件になります。2つ同時に一致している要素はないため、「array([False, False, False])」の真偽値の配列が返り、bの配列から要素を取得することはできません。
なお、選択肢1や2のように、真偽値の配列にand演算子やor演算子を使うことはできません。
(公式書籍 p.132-133)