行列からデータを取得する際には、インデックスを利用すことはわかった。このインデックスの種類としては整数、スライス、配列、ブーリアンがある。これらを組み合わせて柔軟に配列から要素を抜き出すことができる。
今回はYamada, Takahashi, Suzuki, Kawakamiに紐づくデータを用意する。各データは7項目から成り立つ。また一人には複数のデータが紐づいているとする。
まずは名前用の配列を用意する。
# ラベル用配列 name = np.array(["Yamada", "Takahashi", "Suzuki", "Kawakami","Yamada"]) print(name) # ['Yamada' 'Takahashi' 'Suzuki' 'Kawakami' 'Yamada']
次にデータ用の配列を用意する。データ数は5であり、7項目ある。合計25個のデータを用意して、shapeで5×7にしてあげる。
data = np.random.random(35) data = data.reshape(5,7) print(data) # [[0.34424184 0.62308632 0.77090286 0.11197278 0.56711419 0.82823042 0.40272551] [0.97235281 0.15912985 0.52458126 0.39268775 0.58444596 0.28289483 0.88226724] [0.4269921 0.70174719 0.35377691 0.74882525 0.35059669 0.10852082 0.79938528] [0.78825568 0.23561709 0.85584193 0.50858051 0.93876539 0.55676888 0.46110362] [0.30714079 0.72800077 0.74949162 0.06922578 0.89872415 0.69173606 0.93505941]]
さていまYamadaの3~5番目のデータのみを抜き出すとする。
単純に考えると、まずYamadaのデータのみ抜き出す。そしてスライスをすればよい。
# Yamadaを抜き出すためのブーリアン型 b_name = name == "Yamada" print(b_name) # [ True False False False True] print(data[b_name]) # array([[0.34424184, 0.62308632, 0.77090286, 0.11197278, 0.56711419, 0.82823042, 0.40272551], [0.30714079, 0.72800077, 0.74949162, 0.06922578, 0.89872415, 0.69173606, 0.93505941]]) data_x = data[b_name] print(data_x[:,3:5]) # array([[0.11197278, 0.56711419], [0.06922578, 0.89872415]])
さてこの操作はブーリアン型とスライスを合わせることで、一つにまとめることができる。
print(data[b_name, 3:5]) # [[0.11197278 0.56711419] [0.06922578 0.89872415]]
さらにブーリアン配列もinlineにすると以下のようになる。
print(data[name=="Yamada", 3:5]) # [[0.11197278 0.56711419] [0.06922578 0.89872415]]