【入門者向け】NumPy②(配列の生成とNumPyの簡単な演算)|Python入門 #12

f:id:lib-arts:20190930230648p:plain

#1ではPythonを用いたFizzBuzzのコーディングについてまとめました。

入門者の方に読んでみていただいたところ、少し難しかったようなので、#2〜#10ではPythonの基本文法をそれぞれもう少し丁寧に解説を行ないました。

【入門者向け】Pythonの基礎文法① 四則演算・文字列|Python入門 #2 - lib-arts’s diary

【入門者向け】Pythonの基礎文法② リスト・タプル・辞書|Python入門 #3 - lib-arts’s diary

【入門者向け】Pythonの基礎文法③ 制御構文(if、for)|Python入門 #4 - lib-arts’s diary

【入門者向け】Pythonの関数の実装|Python入門 #6 - lib-arts’s diary

【入門者向け】クラスの概要とPythonにおける実装|Python入門 #7 - lib-arts’s diary

【入門者向け】Pythonにおけるクラスの継承とオブジェクト指向|Python入門 #8 - lib-arts’s diary

#11からはPythonを使用する際によく用いるライブラリを見ていければということで、まずはNumPyについて見ていきます。下記のチュートリアルをベースに進めていきます。

Quickstart tutorial — NumPy v1.17 Manual

#11ではNumPyの概要と簡単な動作確認を行いました。

【入門者向け】NumPy①(概要と最低限知っておくと便利な機能)|Python入門 #11 - lib-arts’s diary

#12ではチュートリアルをより詳しく読み進めていきます。
以下目次になります。
1. 配列の生成
2. NumPyの配列操作
3. まとめ


1. 配列の生成
1節では配列の生成について見ていきます。

Quickstart tutorial — NumPy v1.17 Manual

上記のチュートリアルをベースに確認していきます。

f:id:lib-arts:20191002183306p:plain

まずは上記を動かしてみます。説明としては配列の生成方法は複数あり、まず一例として通常のPythonのリストやタプルを元にarray関数を用いて生成する方法について書かれています。下記がコードの抜粋となります。

import numpy as np

a = np.array([2,3,4])
print(a)
print(a.dtype)

b = np.array([1.2, 3.5, 5.1])
print(b.dtype)

実行結果は下図のようになります。dtypeが入力の配列の要素の型によって変わっていることについては注意しておくと良いです。

f:id:lib-arts:20191002183725p:plain

ここでnp.array時にオプションの引数としてdtype=complexを設定することで、各要素を複素数として配列を生成することもできます。

c = np.array( [ [1,2], [3,4] ], dtype=complex )

print(c)
print(c.dtype)

上記の実行結果が下記のようになります。

f:id:lib-arts:20191002184303p:plain

また、配列の生成にあたって、0や1など特定の値を前提に行数や列数などサイズに関する情報を与えるだけで配列を生成する方法もあります。下記のようにnp.zeros、np.ones、np.emptyなどが便利です。

print(np.zeros( (3,4) ))
print(np.ones( (2,3,4), dtype=np.int16 ))
print(np.empty( (2,3) ))

実行結果は下記になります。np.zerosを用いると各要素が0に、np.onesを用いると各要素が1になっていることに着目しておくと良いです。

f:id:lib-arts:20191002185152p:plain

さらに追加で覚えておくと良いのがnp.arangeとnp.linspaceです。下記にサンプルコードを示します。

from numpy import pi
import matplotlib.pyplot as plt

print(np.arange( 10, 30, 5 ))
print(np.arange( 0, 2, 0.3 ))

print(np.linspace( 0, 2, 9 ))
x = np.linspace( 0, 2*pi, 100 )
print(np.sin(x))

plt.plot(x,np.sin(x))
plt.show()

上記の実行結果は下記のようになります。np.arangeは"スタート"、"エンド"、"間隔"を指定し、np.linspaceは"スタート"、"エンド"、"個数"を指定しています。

f:id:lib-arts:20191002185451p:plain

f:id:lib-arts:20191002185513p:plain

ここまででNumPyを用いた配列生成については俯瞰できたと思いますので、1節はここまでとします。

 

2. NumPyの配列操作
2節ではNumPyの配列の操作について見ていきます。

Quickstart tutorial — NumPy v1.17 Manual

上記のチュートリアルをベースに確認していきます。

f:id:lib-arts:20191002190214p:plain

まずは上記を参考に簡単な四則演算について動かしていきます。

a = np.array( [20,30,40,50] )
b = np.arange( 4 )

print(b)

c = a-b
print(c)

print(b**2)
print(10*np.sin(a))
print(a<35)

上記を動かすと下記のようになります。

f:id:lib-arts:20191002190331p:plain

次に行列の掛け算について見ていきます。

A = np.array( [[1,1],
                      [0,1]] )
B = np.array( [[2,0],
                      [3,4]] )

print(A * B)                    # elementwise product
print(A.dot(B))               # another matrix product

上記の実行結果は下記のようになります。A*Bとすると行列の各要素の積になるのに対して、A.dot(B)を用いると行列の積として求めることができることに注意です。

f:id:lib-arts:20191002191856p:plain

基本的な演算操作について確認できたので2節はここまでとします。


3. まとめ
#12ではNumPyの配列生成と配列の演算操作についての確認を行いました。
#13ではNumPyの数学関数の確認とIndexの指定についての確認を行います。