レッスン4 / 4問目

『ファンシーインデックス参照』

このレッスンではファンシーインデックス参照について学習します。

ファンシーインデックス参照はインデックスのリストにより配列要素を参照する方法です。インデックスを格納したリストを渡すことでインデックスに対応した配列要素を取得することができます。イメージとしては前回のレッスンで学習したブールインデックス参照の真偽値(TrueとFalse)をインデックスに置き換えたようなものだとお考え下さい。

では早速例題を見ていきましょう。まずは5 × 4の配列を生成します。

  1. arr = np.arange(20).reshape(5, 4)# 配列を生成
  2. print(arr)
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] [16 17 18 19]]

ファンシーインデックス参照を用いて配列の2行目, 4行目, 1行目を取得します。(リストでインデックスを指定します)

  1. arr2 = arr[[1, 3, 0]] # 2, 4, 1行目を取得
  2. print(arr2)
[[ 4 5 6 7] # 2行目 [12 13 14 15]# 4行目 [ 0 1 2 3]] # 1行目

このようにインデックスを格納したリストで指定することで各インデックスに対応した値を取得することができます。ブールインデックスとは異なり、インデックスのリストの要素数と配列の行数が一致している必要はありません。
また上記の例題のように、指定するインデックスの順序は順番になっている必要はなく、配列の中で何度も同じインデックスを指定することができるという特徴があります。
以下の例ではファンシーインデックス参照で重複したインデックスを指定しています。

  1. arr3 = arr[[1, 2, 1]] # 重複したインデックスを指定
  2. print(arr3)
[[ 4 5 6 7] [ 8 9 10 11] [ 4 5 6 7]]# 1行目を2度参照

インデックス「1」を2度参照していますが、問題なく配列が取得されています。

ではファンシーインデックス参照の説明は以上となります。

まとめ

ではこのチャプターで学習した内容をまとめます。

ndarrayの要素を参照するには「インデックス参照」「スライス」「ブールインデックス参照」「ファンシーインデックス参照」の4つの方法があります。

インデックス参照とスライスによる参照はそれぞれインデックスを指定することによる要素を参照する方法です。ブールインデックス参照は真偽値のリストを用いた参照方法であり、注意点としては配列の要素数と真偽値リストの要素数は同じでなければならない点です。そしてこのレッスンで学習したファンシーインデックス参照はインデックスを格納したリストにより配列の要素を参照する方法でした。

それぞれ以下の表のとおりとなります。

参照方法 説明
インデックス参照 インデックスによる参照
スライス スライスによる参照
ブールインデックス参照 真偽値のリストによる参照
ファンシーインデックス参照 整数値のリストによる参照

では練習問題にチャレンジしましょう。

Lesson1

ファンシーインデックス参照を用いて配列arrの2行目と3行目を抽出し、出力してください。

配列arrの中身は以下の通りです。

[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] [16 17 18 19]]
関連レッスン
インデックス参照
スライス
ブールインデックス参照

Last updated:2019/10/26

[[ 4  5  6  7]
 [ 8  9 10 11]]
  1. import numpy as np

  2. arr = np.arange(20).reshape(5, 4)


  3. # 配列arrの2行目と3行目を抽出し出力してください。

  4. arr2 = arr[[1, 2]]
  5. print(arr2)
main.py
設定
g
n
i
d
a
o
L