-Python- 配列の生成と四則演算

配列の生成
数値計算においては不可欠な配列を生成するには,以下のようにします.

import numpy as np           # Numpyのインポート
list_a = [0, 1, 2, 3, 4, 5# リストの設定
array_a = np.array(list_a)   # 配列の認識
 
配列内の要素を型宣言をするには,以下のようにします.
 
# 型宣言を追加
import numpy as np
list_a = [0, 1, 2, 3, 4, 5]
array_a = np.array(list_a, dtype = float)  # 浮動小数点にするためにfloatを追加
 
.txtや.csvファイルからの読み取りにおいては
 
import numpy as np
# genfromtxtはファイルの読み込みを指示するコード, delimiter: 区切り文字の指定
array_a = np.genfromtxt('xxx.txt', delimiter = ' ', dtype = int)
 
# csvの場合は
array_a = np.genfromtxt('xxx.csv', delimiter = ',', dtype = int)

配列の四則演算
配列全体に1を加算すると全ての要素に1が加算されます.例えば,以下のプログラムを実行すると配列 array_a は [11 21 31 41 51] となります.
 
import numpy as np
list_a = [10, 20, 30, 40, 50]
array_a = np.array(list_a)
array_a = array_a + 1
 
剰余計算においても,全ての要素に適用されます.実行すると配列 array_b 

 [0 0 1 2 0] 

となります.
 
import numpy as np
list_b = [15, 24, 58, 32, 48]
array_b = np.array(list_b)
array_b = np.mod(array_b, 3)
 
上記のプログラムを実行すると配列 array_b は

 [0 0 1 2 0] 

となります.
 
配列同士の四則演算においては,計算結果は自動的にfloat型になります.
 
import numpy as np
list_b = [15, 24, 58, 32, 48]
list_c = [1, 3, 5, 2, 7]
array_b = np.array(list_b)
array_c = np.array(list_c)
 
array_d = array_b / array_c
 
上記のプログラムを実行すると配列 array_d は

[15. 8. 11.6 16. 6.8571426] 

となります.
 
行列の生成
行列を生成するには以下のようにします.

# 3x5行列
import numpy as np
list_e = [0, 1, 2, 3, 4]
list_f = [5, 6, 7, 8, 9]
list_g = [10, 11, 12, 13, 14]
 
matrix_a = np.array([list_e, list_f, list_g])
 
上記のプログラムを実行すると行列matrix_a(実際には2次元配列)が生成されて,

[[0 1 2 3 4]
 [5 6 7 8 9]
 [10 11 12 13 14]]

となります.
 
csvファイルからの読み取り
例として,以下のように書かれた.csvファイルがあったとします(ex.csvというファイル名).

0,1,2,3
4,5,6,7
8,9,10,11
 
これらのデータを読み取って行列にするには
 
import numpy as np
matrix_h = np.genfromtxt('ex.csv', delimiter=',', dtype=float)
 
とします(上記の例では浮動小数点(dtype=float)).すると,

[[0. 1. 2. 3.]
 [4. 5. 6. 7.]
 [8. 9. 10. 11.]]

となります.
 
零行列の生成
零行列を生成するには,以下のようにします(3x3行列).
 
import numpy as np
matrix_i = np.zeros*1
 
とします.すると,

[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

となります.
 
単位行列の生成
零行列を生成
 
import numpy as np
matrix_a = np.eye(3)

とします.すると

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
となります.

行列の四則演算
配列の計算と同様に,行列全体に1を加算すると全ての要素に1が加算されます.
 
import numpy as np
list_a = [0,1,2,3,4]
list_b = [5,6,7,8,9]
list_c = [10,11,12,13,14]
matrix_a = np.array([list_a,list_b,list_c])
matrix_b = matrix_a + 1
 
とすると,各要素に1が加算されて以下のようになります.
 
[1,2,3,4,5]
[6,7,8,9,10]
[11,12,13,14,15]
 
これは,他の演算に関しても同様です.行列同士の演算は行列の演算則に従いますが,積の場合は注意が必要です.
 
import numpy as np
list_a = [0, 1]
list_b = [2, 3]
matrix_a = np.array([list_a, list_b])
matrix_b = np.array([list_b, list_a])
matrix_c = matrix_a * matrix_b

 
とすると,各要素を掛け合わせてしまい matrix_c は以下のようになります.

[[0 3]

 [0 3]]

これは正しくないので,行列の積を求める際には,以下のようにしなければなりません.
 
import numpy as np
list_a = [0,1]
list_b = [2,3]
matrix_a = np.array([list_a,list_b])
matrix_b = np.array([list_b,list_a])
matrix_c = np.dot(matrix_a,matrix_b) 
 
すると,

[[0 1]
 [4 9]]

となり,正しい結果が得られます.または,以下のようにしてnp.matrixで行列を生成させても正しい結果となります.
 
import numpy as np
list_a = [0,1]
list_b = [2,3]
matrix_a = np.matrix([list_a,list_b])
matrix_b = np.matrix([list_b,list_a])
matrix_c = matrix_a * matrix_b 
 

*1:3, 3