SJS2016 ex03 †[edit]課題いっぱいありますが,1回で全部終わらせようという意図ではありません. 自分で進められるひとはどんどん先へ進めたらよいですが. 前回分と今回分 †[edit]
課題A †[edit]Python で関数 課題A-1 †[edit]
def func1(x): x = 3 print(x) def func2(x): return x + 1 def func3(x): x[0] = 'hoge' x.append('fuga') print(x) if __name__ == '__main__': y = [ 1, 'a', [ 10, 20, 30 ], -1 ] z = 999 func1(y) print('y = ', y) func1(z) print('z = ', z) #yy = func2(y) # ERROR! #print('yy = ', yy) zz = func2(z) print('zz = ', zz) func3(y) print('y = ', y) #func3(z) # ERROR! #print('z = ', z) 課題A-2 †[edit]上記に次の関数定義を追加しよう. def func4(x, a = 999, msg = 'hogege'): print(msg, x + a) そして,次のように呼び出してみよう. func4(1) func4(1, a = 0) func4(2, msg = 'nyanya') func4(3, msg = 'nyanya', a = -2) #func4(a = 999, 4) #ERROR! ここで登場しているのは,「キーワード引数」というものである.詳しくは書籍等を参照.キーワード引数は順序を気にしなくてよい(最後の例のような場合はNG). 課題B †[edit]モジュールと import 課題B-1 †[edit]課題Aのプログラムを hoge.py という名前で保存していたとする.このとき,同じディレクトリ内に次の内容のプログラム fuga.py を作成し,実行してみよう. import hoge def func1(): print('Hoge?') if __name__ == '__main__': func1() hoge.func1(999) hoge.func3( [ 1, 'a', [ 10, 20, 30 ], -1 ] ) 課題B-2 †[edit]hoge.py の最初の方に1行追加して hogefuga = { 1:'Hoge', 2:'Fuga', 3:'Hena' } def func1(x): : のようにすると,「モジュール名.変数名」という形でこの変数 hogefuga を次のように fuga.py の方から参照できる. for i in range(1, 4): print(i, hoge.hogefuga[i]) ただし,ipython 上で %run fuga.py のように実行している場合,そのままでは hoge.py の修正が再読込されないので,次のようにしてやる必要がある. In [20]: reload(hoge) Out[20]: <module 'hoge' from 'hoge.py'> In [21]: %run fuga.py 課題B-3 †[edit]fuga.py 中の import 文を import hoge as nya と書き換えたら,main の方はどう修正したらよいだろう? 課題C †[edit]NumPy 入門 import numpy as np A = np.array( [ [ 1, 2, 3 ], [ 4, 5, 6 ] ] ) print(A) print(A.shape, A.dtype) print() B = np.array( [ [ 1, 2, np.pi ], [ 4, 5, 6 ] ] ) print(B) print(B.shape, B.dtype) print() A[0,1] = np.exp(1) B[0,1] = np.exp(1) print(A) print(B) print() print(B**2) print(np.log(B)) print() C = A + B print(C, C.shape, C.dtype) print() vec = np.arange( 1, 21 ) print(vec, vec.shape, vec.dtype) print() mat = np.reshape( vec, ( 4, 5 ) ) print(mat, mat.shape) print() print(mat.T, mat.T.shape) print() mat[1, 1] *= 111 print(mat) print(vec) print() X = mat[:2,2:4] print(X) print() Y = X - 2 print(Y) Z = X * Y print(Z) Z = np.dot( X, Y ) print(Z) 課題D †[edit]PIP/2016 第12回講義資料の Q1 を NumPy を利用して解いてみよう. 課題D-1 †[edit]まずは手計算を併用して解いてみよう.式(11)を \( A\mathbf{x} = \mathbf{b} \) という形で表すことにする.
課題D-2 †[edit]以下が何をやっているか理解し,これに連立方程式を解く部分を追加しなさい. import numpy as np xorg = np.array( [ 4.0, 5.0, 6.0, 9.0 ] ) yorg = np.array( [ 30.0, 31.0, 29.0, 28.0 ] ) xvec = xorg - xorg[0] yvec = yprg - yorg[0] X = np.vstack( ( xvec, np.ones_like(xvec) ) ) print(X, X.shape) Y = yvec print(Y, Y.shape) A = np.dot( X, X.T ) print(A) b = np.dot( X, Y ) print(b) |