大域変数を関数内で使う際の注意:
To use global variables in function:
pythonにおいて、大域変数として宣言された変数をfunction内で使用する際には注意が必要です。
混乱を避けるため、大域変数はdef function内の最初にglobal宣言するべきです。
Interpretation of variables defined both global and in function in
python is tricky.
To avoid confusion, better use 'global'.
g_value = 1.0
def func(x):
global g_value
...
サイズ指定の配列をリスト型で使う場合:
Define n size array by list:
array = [0.0] * n
Note: Don't use array
= [[0.0]*n]*m for 2D array.
For example, array[0][1]
= 1.0 will change all array[i][1]
to 1.0.
Remind the elements in this list array[i]
are references to the same object "[0.0]*n".
一次元配列をnumpy.ndarrayで使う場合の注意
・ 一次元配列 aに対しての転置はとれない:
a.transpose() == a のまま
転置を取る場合は、a.reshape((ndim, 1)) を使う
あるいは、一次元配列に対しても、二次元配列を用いる:
a = numpy.empty((ndim, 1))
at = a.transpose() =>
転置ベクトルになる
・ 一次元配列同士の *、@ には注意
a = numpy.array([1, 2])
a * a = [1, 4]:
要素ごとの乗算
数学通りに内積を取る場合は、
a @ a.reshape((ndim, 1))
のはずだが、
a @ a と、 右の a
を転置にしなくても、内積になる。
・ 数学のa・a を計算する場合は、
numpy.inner(a, a)
とする方がわかりやすい
・ a^t @ a を計算する場合は、
numpy.outer(a, a)
とする方がわかりやすい (英語のouter productも外積だが、一次元配列の要素ごとの積行列の計算)
・ 日本語の外積は cross product
numpy.cross(a, b)
Use mathematical functions
from math import exp, sin, cos, tan
range(N1, N2, N3) function:
generate integer tuple from N1 to N2-1
at N3 step
繰り返し: i = 0 から N-1 まで
Loop: Repeat from i = 0 to N-1
for i in range(N):
print(i)
else:
...
繰り返し
Loop: while
i = 0
while i < 10:
print(i)
i++
else:
...4
条件分岐
Conditional branch
if a == b:
print('a = b')
elif a > b:
print('a > b')
else
print('a < b')
if __name__ == '__main__' trick:
あるpythonスクリプトを、独立したプログラムとして使うとともに、
モジュールとしても使う場合にこのトリックを使います。
__name__変数には、pythonモジュール名 (スクリプトファイル名から拡張子
.pyを除いた部分)が
入りますが、独立したプログラムとして実行された場合は、"__main__"が入ります。
if文でこの判断をし、__name__ == "__main__"
が成立した場合だけ main() 関数を呼び出すように
すると、importされた場合にはmain()が実行されません。
Use if the python script will be used also for a module.
The following set of script will execute main(x)
only when the variable __name__ is '__main__',
which is satisfied only when the python script is directly
executed.
def main(x):
...
if __name__ == '__main__':
main()
関数の定義
Define function
def func(x):
y = x
return x, y
文字列オブジェクトの.formatメソッドによる整形
Format of floating point
s =
"{:12.4f}".format(val)
s = "{:12.4e}".format(val)
s = "{:<+12.4f}".format(val)
s = "{:^12.4f}".format(val)
s = "{:>12.4f}".format(val)
csv (カンマ区切り)
ファイルへの書き込み
Write to csv (comma separated values file)
import csv
header = ['x', 'y']
data = [[0, 0], [1, 3], [2, 5]]
f = open('out.csv', 'w')
fout = csv.writer(f, lineterminator='\n')
fout.writerow([header)
for row in data:
fout.writerow(row)
f.close()