しろちゃのプログラミング日記

プログラミング初心者が勉強したことを書き留めるブログ

Pythonモジュール・ライブラリ!Numpy編2(基本の計算)

はじめに

この記事は、PythonのライブラリNumPyの

基礎的な情報を紹介するNumPy編シリーズの2つ目の記事です


NumPyを使った計算を行う方法を紹介します


基本の計算

既にお腹いっぱい胸いっぱいなにより頭がいっぱいいっぱいという感じですが

しろちゃからエールを送るので頑張って下さい

f:id:ai_shirocha:20191120123233p:plain
ファイトです!!


Numpyではnpリストごとに計算を行い、

結果のnpリストは元のnpリストとは別に作成されるので

計算してもnpリストが更新されることはありません


算術演算子Pythonと同じものが使えます


まずはnpリストを作成しときます

>>> a = np.arange(10, 55, 10)
>>> print(a)
[10 20 30 40 50]

この変数「a」を使って計算していきましょー


npリストと数字の計算

下記のように入力してください

>>> x = a + 2
>>> print(x)
[12 22 32 42 52]

計算結果を変数xに代入し、出力しました

それぞれの要素に「2」が足されているのが分かります

加法以外の計算もこんな感じでできます


npリスト同士の計算

この場合、それぞれ対応する要素ごとに計算は行われます

1番目と1番目、2番目と2番目、みたいな感じですね


ですが要素の数が異なるときは、

すべての要素に対応する要素があるわけではありません

その場合、計算は行えずエラーになります

>>> c = np.linspace(0, 10, 5)
>>> print(a)
[10 20 30 40 50]
>>> print(b)
[ 0.   2.5  5.   7.5 10. ]
>>> x = a * b
>>> print(x)
[  0.  50. 150. 300. 500.]

npリスト「a」と「b」の計算をやってくれました

こちらも乗法以外も色々できます


npリストの値を計算結果に更新する

前述の通り、npリストは計算しても

新しい値に勝手に更新されることはありません


ただし計算結果を元の変数に代入すれば

まるごと更新されるため、

値を更新するのと同じ結果を得ることができます

>>|python|
>>> b = np.arange(5)
>>> print(b)
[0 1 2 3 4]
>>> b = b + 2
>>> print(b)
[2 3 4 5 6]
>>> b = np.arange(5)
>>> b += 100
>>> print(b)
[100 101 102 103 104]
|

こんな感じです

この「+=」とかも、

すべてPythonの標準装備です

特殊な演算子はないので楽ちんですね


npリスト内全体で行う主な計算

基本の計算では要素一つ一つをそれぞれ計算し、

計算結果は元のnpリストと同じ大きさのnpリストとして算出されました

これはリスト内で計算を行い、

結果は元のnpリストよりも小さくなります


(なおここで言うnpリストの大小とは

要素そのものの大小ではなく

要素のの多少のことです)


計算軸を指定する「axis」パラメータ

例によってパラメータというのが何を意味するのかは良く分かりませんが、

これを指定することで縦、または横方向に

この後に紹介する計算を行うことができます


要するに行と列の話なので

「axis」が活かせるのは二次配列の数列となります


「axis = 0」の時は方向に、

「axis = 1」の時は方向に、


それぞれ計算をする方向を指定できます


具体例はこの後紹介します


npリスト内の値を合計する「sum」

Excelなどでもおなじみ、sumです

利用方法も大体同じ

使うと合計が出てきます

>>> a = np.arange(12).reshape(3,4)
>>> print(a)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
>>> print(a.sum())
66

ここで、前述した「axis」を使用することができます

以下のように記述してください

>>> b = a.sum(axis = 0)
>>> print(b)
[12 15 18 21]
>>> c = a.sum(axis = 1)
>>> print(c)
[ 6 22 38]

見比べてもらうと分かると思うのですが、

「axis = 0」の時は方向に

「axis = 1」の時は方向に

それぞれ計算が行われています


最大値・最小値を取り出す「max」「min」

使い方はsumとほぼ同じです

せっかくなので乱数を作成して調べてみます

>>> r = np.random.randint(1, 1000, 1000)
>>> print(r)
[ 29 346 357 385 658 270 967 669 608 937 …(略)」
>>> M = r.max()
>>> print(M)
998
>>> m = r.min()
>>> print(m)
3

1以上1000未満の整数を使って1000個の乱数を作成し、

最大値と最小値を取り出しました


ユニバーサル関数

NumPy provides familiar mathematical functions such as sin, cos, and exp. In NumPy, these are called “universal functions”(ufunc). Within NumPy, these functions operate elementwise on an array, producing an array as output.
引用元:Quickstart tutorial — NumPy v1.18.dev0 Manual

Google先生の直訳によれば

「NumPyは、sin、cos、expなどの使い慣れた数学関数を提供します。NumPyでは、これらは「ユニバーサル関数」(ufunc)と呼ばれます。NumPy内では、これらの関数は配列に対して要素ごとに動作し、出力として配列を生成します。」

相変わらず意味の分からない説明です


sin、cosは分かります

三角関数です

expって何?

経験値??

どうでもいいことのフォントサイズが大きいしろちゃです

おそらく数式の一種なのでしょう

数学のテストで40点台を取りまくった私の手には負えません


使う時が訪れないことを祈るばかりですが

万が一の時は以下のように記述してください

np.数式()

具体的な使い方を紹介します

>>> import matplotlib.pyplot as plt
>>> x = np.arange(1, 10, 0.1)
>>> y = <b>np.sin(x)</b>
>>> print(plt.plot(x, y))
[<matplotlib.lines.Line2D object at 0x0000027587343488>]
[f:id:ai_shirocha:20191120215041p:plain]

グラフ描画のためのライブラリmatplotlibを使い、

三角関数のグラフを作成してみましたー


ところで、三角関数ってなんだっけ・・・


まとめ

この記事では、

Numpyの基本な計算方法を紹介しました


関数とかなんとかややこしいことがたくさんありますね

私は気が狂いそうです!(いい笑顔)


基本でもしっかり使える関数がたくさんあるので、

ぜひ活用してくださいー


さいごに

またもやかなり長くなってしまいました…


ここまで読んでくださった方、

本当にありがとうございます!!


間違いなどあればご報告いただければ幸いですm(__)m


次回は、インディックスみたいなの(未定)を紹介しようと思います!