import numpy as np

配列同士の演算#

配列同士の演算も、普通の演算子(+,-,*,/,%など)でできます。

加算#

np.ones((10,5)) + np.arange(50).reshape((10,5))
array([[ 1.,  2.,  3.,  4.,  5.],
       [ 6.,  7.,  8.,  9., 10.],
       [11., 12., 13., 14., 15.],
       [16., 17., 18., 19., 20.],
       [21., 22., 23., 24., 25.],
       [26., 27., 28., 29., 30.],
       [31., 32., 33., 34., 35.],
       [36., 37., 38., 39., 40.],
       [41., 42., 43., 44., 45.],
       [46., 47., 48., 49., 50.]])

減算#

np.array([10,9,8]) - np.ones(3)
array([9., 8., 7.])

乗算#

np.array([[10,9,8],[11,91,81]]) * np.array([2,3,4])
array([[ 20,  27,  32],
       [ 22, 273, 324]])
np.array([[10,9,8],[11,91,81]]) * np.array([[11,91,81],[10,9,8]]) 
array([[110, 819, 648],
       [110, 819, 648]])

除算#

np.array([10,9,8]) / np.array([2,3,4])
array([5., 3., 2.])

剰余#

np.array([10,9,8]) % np.array([3,4,5])
array([1, 1, 3])

① 以下の流れで演習用データを作成

  1. 10~19の要素を持つベクトルを用意

  2. 5x2配列にreshape

  3. これを変数xに代入

  4. 15~24の要素を持つベクトルを用意

  5. 5x2配列にreshape

  6. これを変数yに代入

この2つの配列に対して

(1) 加算
(2) 減算
(3) 乗算
(4) 除算
(5) 剰余

を計算

# (1)
# (2)
# (3)
# (4)
# (5)

等式と不等式#

返り値はbool値(真偽値)の配列になります。

等式#

np.array([5,7,9]) == np.array([3,7,11])
array([False,  True, False])

不等式#

np.array([5,7,9]) != np.array([3,7,11])
array([ True, False,  True])
np.array([5,7,9]) >= np.array([3,7,11])
array([ True,  True, False])
np.array([5,7,9]) < np.array([3,7,11])
array([False, False,  True])

② 下の変数x,yについて

(1) 2つの変数で等しい養素をTrue, 等しくない養素をFalseにしたベクトルを出力
(2) x以上のyの養素をTrue, 未満をFalseにしたベクトルを出力

x = np.array([1,2,10,20])
y = np.array([5,-1,20,10])
# (1)
# (2)

内積と外積#

内積 np.dot#

a = np.arange(0,10).reshape((2,5))
b = np.arange(0,15).reshape((5,3))

print("a:")
print(a)
print("b:")
print(b)

np.dot(a,b)
a:
[[0 1 2 3 4]
 [5 6 7 8 9]]
b:
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]
 [12 13 14]]
array([[ 90, 100, 110],
       [240, 275, 310]])

外積 np.outer#

c = a[0]
d = b[0]

print("c:",c,"d:",d)

np.outer(c,d)
c: [0 1 2 3 4] d: [0 1 2]
array([[0, 0, 0],
       [0, 1, 2],
       [0, 2, 4],
       [0, 3, 6],
       [0, 4, 8]])

③ ニューラルネットワークの結合重み行列Wがある。
このWと入力行列Xの内積を取り、バイアスベクトルbを足し合わせた値を出力してください。

ただし、W,X,bは以下の値を使ってください。

np.random.seed(seed=1234)

# 入力データ
X = np.random.random((32, 20))

n_feature = X.shape[1]
n_hidden = 5

W = np.random.random((n_feature, n_hidden))

b = np.random.uniform(n_hidden)
# ③