0Pricing
Learn AI with Python · レッスン

インデックス参照、スライス、ファンシーインデックス

基本的なスライス、ブールマスク、ファンシーインデックス、条件選択のための 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])   # 50

1次元配列のスライス

スライスは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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 配列の作成とプロパティ
  2. インデックス参照、スライス、ファンシーインデックス
  3. ブロードキャストとベクトル化演算
  4. NumPy による線形代数
← Learn AI with Pythonに戻る