python豆知識:
python tips:

大域変数を関数内で使う際の注意:
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()