見出し画像

Python - 便利なNumpy (3) - インデックスなど。

インデックス

インデックスで指定してやる方法はNumpy以外の方法と同じです。リスト内の要素については0,1,2,・・と順番がついているのでそれを指定してやります。

array([1, 2, 3])

a[0]は"1"となります。

array([[1, 2, 3],
       [4, 5, 6]])

a[0][0]は"1"、a[0][1]は、"2"、a[1][1]は、"5"になります。

スライシング

スライスはリストの値の欲しい部分を指定して抜き出す時に使う手法です。

[開始:終了:(step数)]

を指定して取り出します。

arr = np.array([0, 1, 2, 3, 4, 5])
arr[1:3]

とすると

array([1, 2])

が取り出せます。インデックスで開始、終了の部分を指定して取り出しています。


ブロードキャスティング

a = np.array([[1, 2]])
b = np.array([3, 4])

2つのリストを作ります。aは[[]]2重のリスト、bは[]のリスト。shapeで次元数をみてみると

aは(1, 2)、bは(2,)

a + b

をする場合には"a"に合わせて計算されて、

array([[4, 6]])

となります。次元は違いますがそれぞれに足されています。

NumPyにおけるブロードキャストは以下の2つのルールによって実行される。

  1. 次元数を揃える

    • 2つの配列の次元数が異なる場合、次元数が少ない方の配列の先頭にサイズ(長さ)が1の新しい次元を追加して次元数を揃える。

  2. 各次元のサイズ(長さ)を揃える

    • 2つの配列の各次元のサイズが一致しない場合、サイズが1である次元は他方の配列の次元のサイズに引き伸ばされる(値が繰り返される)。

    • 2つの配列のどちらのサイズも1ではない次元が存在するとブロードキャストできずにエラーとなる。


あとは便利な関数。

NumPyのargmax関数は、

多次元配列の中の最大値の要素を持つインデックス

を返す関数。インデックスを返すところがミソ。

import numpy as np
a = np.random.randint(10, size = 10)
a

とするとランダムに配列を作ってくれます。

array([7, 6, 1, 8, 6, 8, 6, 6, 1, 6])

この最大要素のインデックスを取り出します。

np.argmax(a)

とすると"3"が取り出されます。インデックスが"3"ということなので、数字としては"8"が最大値。同じ数字がある場合は先の数字が対象になります。

次に、条件式を指定するwhere

a = np.random.randint(10, size = 10)
a

array([6, 9, 3, 4, 8, 9, 8, 6, 1, 4])

という配列。

np.where(a < 5)

とすると5未満(4以下)の数字の要素のインデックスを返します。

(array([2, 3, 8, 9]),)

などなど。

この記事が気に入ったらサポートをしてみませんか?