インデックス参照、スライス、ファンシーインデックス
基本的なスライス、ブールマスク、ファンシーインデックス、条件選択のための np.where() を学びます。
「インデックス参照、スライス、ファンシーインデックス」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
インデックスの基本
NumPyの配列は、Pythonのリストと同じく0から始まるインデックスを使います。負のインデックスは末尾から数えます。
import numpy as np
a = np.array([10, 20, 30, 40, 50])
print(a[0]) # 10
print(a[-1]) # 501次元配列のスライス
スライスはstart:stop:stepを使い、コピーではなくビューを返すため、スライスを変更すると元の配列も変更されます。
print(a[1:4]) # [20 30 40]
print(a[::2]) # [10 30 50]
view = a[1:3]
view[0] = 99
print(a) # [10 99 30 40 50]2次元配列のインデックス指定 [row, col]
2次元配列では、両方の座標を1つの角括弧内に指定してインデックスを取得します:m[row, col]。m[row][col]よりも簡潔で高速です。
m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(m[1, 2]) # 6
print(m[0, 0]) # 1行と列のスライス
軸全体を取得するにはコロンを使います。m[:, 1]は、すべての行から列1を選択します。
print(m[0, :]) # first row: [1 2 3]
print(m[:, 1]) # second col: [2 5 8]
print(m[1:, :2]) # bottom-left blockブールマスク
比較演算は、同じ形状のブール配列を生成します。そのマスクを使ってインデックス指定すると、Trueの位置だけが残ります。
a = np.array([5, 12, 7, 20, 3])
mask = a > 8
print(mask) # [False True False True False]
print(a[mask]) # [12 20]条件の組み合わせ
要素単位の&(and)と|(or)を、括弧とともに使います。Pythonのキーワードand/orは配列では機能しません。
print(a[(a > 4) & (a < 15)]) # [ 5 12 7]マスクを使った代入
マスクされた位置に値を書き込むことで、データをその場で整形できます。たとえば、外れ値を上限値に制限できます。
a = np.array([5, 12, 7, 20, 3])
a[a > 10] = 10
print(a) # [ 5 10 7 10 3]配列を使ったファンシーインデックス
整数インデックスの配列(またはリスト)を渡すと、任意の要素を順序を自由に選択できます。要素の重複も可能です。これはビューではなくコピーを返します。
a = np.array([10, 20, 30, 40, 50])
idx = [4, 0, 2, 2]
print(a[idx]) # [50 10 30 30]2次元配列のファンシーインデックス
2つのインデックス配列を指定して、特定の(row, col)ペアを選択します。ここでは対角の両端にある要素を取り出します。
m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
rows = [0, 2]
cols = [0, 2]
print(m[rows, cols]) # [1 9]np.whereによる条件選択
np.where(cond, x, y)は、条件がTrueの位置ではxの要素を、それ以外ではyの要素を返します。ベクトル化されたif-elseです。
a = np.array([-2, 5, -7, 3])
print(np.where(a < 0, 0, a)) # [0 5 0 3] (clip negatives)インデックスの検索に使うnp.where
引数を1つだけ指定してnp.where(cond)を呼び出すと、条件が成立する位置のインデックスが返されます。
a = np.array([10, 20, 30, 40])
print(np.where(a > 15)) # (array([1, 2, 3]),)確認問題
インデックス指定のスキルを確認しましょう。
まとめ
選択のテクニック:
- 基本的なインデックス指定とスライス(スライスはビューです)
- 2次元配列へのアクセスには
m[row, col]、軸全体には:を使う &と|を使ったブールマスク- インデックス配列を使ったファンシーインデックス(コピーを返します)
- ベクトル化されたif-elseには
np.where(cond, x, y)を使う
よくある質問
「インデックス参照、スライス、ファンシーインデックス」レッスンは無料ですか?
はい。「インデックス参照、スライス、ファンシーインデックス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「インデックス参照、スライス、ファンシーインデックス」で何を学びますか?
基本的なスライス、ブールマスク、ファンシーインデックス、条件選択のための np.where() を学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「インデックス参照、スライス、ファンシーインデックス」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 配列の作成とプロパティ
- インデックス参照、スライス、ファンシーインデックス
- ブロードキャストとベクトル化演算
- NumPy による線形代数