NumPyのこと

numpy

前書き

なんとなく使っている

普段私は、NumPyは色々な計算をしてくれるライブラリだな。

そのくらいの理解でなんとなく使っていました。

誰かのコードをみて、「ふむふむ、こう書いておけばいいのね。」

と。

今回は使い方をまとめてみました。

ひとつずつやってみよう

まずはインポート

NumPyを使用するには、最初にインポートをしなければいけません。

コマンドでPythonを開くか、エディターに記述しちゃってもいいでしょう。

import numpy as np

インポートしたから、これ以降はNumPyのメソッドは np と書きますよ。です。

NumPyは配列で計算する

なんか難しそうですが、要は 1 + 2 = 3,  2 + 2 = 4 ……と

ひとつずつ記述しなくても、[] で囲んだ複数の数字を順に計算してくれます。

それで、[] で囲んだものを配列という。

配列を作るには、np.array() を使用する。

xの配列を作るには

import numpy as np

x = np.array([1.0, 2.0, 3.0])
print(x)

答え

 [1. 2. 3.]

といった感じ。

xとyの配列を計算するには

import numpy as np

x = np.array([1.0, 2.0, 3.0])
y = np.array([2.0, 4.0, 6.0])
x + y       # 要素ごと(1番目同士、2番目同士、3番目同士)の足し算

答え

array([3., 6., 9.])

配列に対して、一つの数値で計算することもできる。

import numpy as np

x = np.array([1.0, 2.0, 3.0])
x / 2.0

答え

array([0.5, 1., 1.5])

N次元配列

なんじゃ?なんですが、見てみればそういうことね。です。

2次元配列の例です。

x = np.array([[1, 2], [3, 4]])
print(x)

答え

[[1 2]
 [3 4]]

2組の要素が入っていますね。

2次元配列2個を計算してみると

import numpy as np
x = np.array([[1, 2], [3, 4]])
y = np.array([[3, 0], [0, 6]])

x + y

答え

array([[4, 2], 
       [3, 10]])

また1番目同士、2番目同士・・・と計算しています。

で、N次元だからどうなの?は置いといて

考えちゃうと先に進まないので、多次元を超ざっくり解釈。

まず、多次元配列だの変数がどうのだというとわからなくなるので、

とりあえず、

  • 1次元配列・・・要素を縦か横に一直線に並べたもの(ベクトル)
  • 2次元配列・・・行列
  • 3次元以上・・・いっぱいある。多次元(テンソル)

くらいに考えて先に進んでいくことにします。

ブロードキャスト?

NumPyを使用すると、形状の異なる配列の計算も

自動でやってくれるます。

この機能をブロードキャストと呼ぶようです。

こんな形の計算

import numpy as np
x = np.array([[1, 2], [3, 4]])
y = np.array([10, 20])        # xとyは要素数が違い異なる形状の配列

x * y 

答えはだいたい予想がつきます。

array([[10, 40],
       [30, 80]])

yの1つの要素を、xの2つの要素どちらに対しても計算してくれています。

確かに指示してないのにやってくれていますね。

各要素へのアクセス

要素を番号でアクセスするわけですが、

スタート番号は、「0」になります。だから、「実際の1番目が 0番」です。

x の 0番目 の要素にアクセスしてみます。

import numpy as np
x = np.array([[1, 2], [3, 4], [5, 6]])
x[0]        # 0番目を指定

答え

array([1, 2])

といったやり方のようです。

for を使って順番にアクセスする

ちょっと実用的になってきます。

もう考えるより、やってみたほうが早いのでやってみます。

「Nは、xの配列に順番にアクセスしたもの」

をやってみます。

import numpy as np
x = np.array([[1, 2], [3, 4], [5, 6]])
for N in x:
  print(N)

答え

[1 2]
[3 4]
[5 6]

これは便利そうです。

コメント

タイトルとURLをコピーしました