課題いっぱいありますが,1回で全部終わらせようという意図ではありません. 自分で進められるひとはどんどん先へ進めたらよいですが.
Python で関数
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)
上記に次の関数定義を追加しよう.
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).
モジュールと import
課題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 ] )
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
fuga.py 中の import 文を
import hoge as nya
と書き換えたら,main の方はどう修正したらよいだろう?
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)
PIP/2016 第12回講義資料の Q1 を NumPy を利用して解いてみよう.
まずは手計算を併用して解いてみよう.式(11)を \( A\mathbf{x} = \mathbf{b} \) という形で表すことにする.
以下が何をやっているか理解し,これに連立方程式を解く部分を追加しなさい.
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)