データ分析・上級問題チェック

問題 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)