8. numpy入門#

8.1. 達成目標#

基本的な行列作成、演算、列参照できるようになろう。

8.2. 参考サイト#

8.3. チュートリアル#

import numpy as np

# 行列の作成
a = np.array([[1,2,3], [4,5,6]])
print(a)
print(type(a))
print(a.shape)
[[1 2 3]
 [4 5 6]]
<class 'numpy.ndarray'>
(2, 3)
#行の参照
a[0]
array([1, 2, 3])
#列の参照
a[:,0]
array([1, 4])
#スライス指定も可能
a[0:2]
array([[1, 2, 3],
       [4, 5, 6]])
a[:,0:2]
array([[1, 2],
       [4, 5]])
# 「行列 + 1」は全要素に対する和を実行
a + 1
array([[2, 3, 4],
       [5, 6, 7]])
# *演算子も同様。
a * 2
array([[ 2,  4,  6],
       [ 8, 10, 12]])
#行列演算ではない!
a * a
array([[ 1,  4,  9],
       [16, 25, 36]])
#転置行列
a.T
array([[1, 4],
       [2, 5],
       [3, 6]])
#内積を求めるにはdot関数を使う
np.dot(a, a.T)
array([[14, 32],
       [32, 77]])
#逆行列
np.linalg.inv(np.dot(a, a.T))
array([[ 1.42592593, -0.59259259],
       [-0.59259259,  0.25925926]])
#ゼロ行列、1行列、対角行列
print(np.zeros((2,3)))

print(np.ones((2,3)))

print(np.eye(3))
[[0. 0. 0.]
 [0. 0. 0.]]
[[1. 1. 1.]
 [1. 1. 1.]]
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
#特定範囲内で幅を指定してサンプル点を用意。
#例えば、
# 「y=x**2」のグラフを描画したいとき、
# 定義域「-10〜10の範囲で0.1刻みでサンプル点を用意」みたいなときに便利。
np.arange(0, 1, 0.3)
array([0. , 0.3, 0.6, 0.9])
#np.arangeで始点、刻み幅を省略すると0から指定個数の整数を用意。
np.arange(8)
array([0, 1, 2, 3, 4, 5, 6, 7])
#行列の形を変形できる。
np.reshape(np.arange(6),(2,3))
array([[0, 1, 2],
       [3, 4, 5]])
#刻み幅はどうでも良いからサンプル数を指定したい場合に便利。
np.linspace(0,2,3)
array([0., 1., 2.])
np.linspace(0,2,4)
array([0.        , 0.66666667, 1.33333333, 2.        ])
#行列を結合できる。
#縦方向に結合
a = np.array([[1,2,3], [4,5,6]])
b = np.array([[7,8,9], [10,11,12]])
np.r_[a, b]
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
#横方向に結合
np.c_[a, b]
array([[ 1,  2,  3,  7,  8,  9],
       [ 4,  5,  6, 10, 11, 12]])

8.4. 演習演習#

  • ベクトル演算の演習

    • (1) 5個の要素を持つ列ベクトルを作成せよ。値は全て1とする。

    • (2) 1で作成した列ベクトルのうち、2番目の要素を3.14に更新せよ。なおインデックスは0から数える(0番目、1番目、2番目、、)ものとする。

    • (3) 2で作成した列ベクトルを複製し、転置により行ベクトルに変換せよ。

    • (4) 用意した列ベクトルと行ベクトルの内積を求めよ。

    • (5) np.random.randを用いて、10個の要素を持つ列ベクトルを作成せよ。

  • 行列演算の演習行列演算の演習

    • (6) np.random.normalを用いて、平均値10、標準偏差2の正規分布に基づく、2行5列の行列を作成せよ。

    • (7) 6で作成した行列から、2列目の要素を抜き出だせ。

    • (8) 6で作成した行列から、3列目と4列目の要素を抜き出せ。

    • (9) np.random.randで5行2列の行列を用意し、6で用意した行列との積を求めよ。