超音波流体屋のプログラム備忘録

Python

最終更新:

usapfrog

- view
管理者のみ編集可
atwikiは行番号を入れるとコピペ時インデントが飛ぶので、この文書では行番号は付けていない。

基本

インタラクティブモードは
python3
windows実行時はminttyなど使用せず、cmdを使うほうが良い模様。

コメントは#、代入演算子(+=)は使えるがインクリメントはなし。
電気屋なのか複素数はj
z=1+2j
z.conjugate()
^はビット演算子(排他的ビット和)なのでpowを使う

numpyなど毎回使うものは適当にスクリプトとして書いておき
alias py="python3 -i ~/startup.py"とかすればよい
import numpy as np
import math as m
import matplotlib.pyplot as plt


出力フォーマット

%に続いておなじみのC形式のフォーマットが使える(のは2までらしい。)
複数あるときはタプル(=変更不可リスト・丸括弧で囲む)を使う。
print "Hello World"
print "Count Down: %d" % 3
print "Count Down: %d %d %d" % (3,2,1)
 

条件分岐

:とelif
if condition1:
  statement1
elif condition2:
  statement2
else:
  statement3
 
endやら閉じる括弧がない

ループ

これで1-9までが表示される。
rangeはbegin-end式で、first-final式でないのに注意。
for i in range(1,10):
  print "loop : %d", i
 
リストやタプルでも指定できる。
for i in [1,2,3]:
  print "loop : %d", i
 
whileは while condition:

配列

角括弧でアクセスする。0インデックス。
a=[1,2,3]
print a[0]
 

ファイルIO

読み込み、文字→数値変換は int()やfloat()など。
f = open('text.txt', 'r')
for line in f:
  print line,
f.close()
 
書き込み
f = open("test.txt","w")
f.write("hogehoge.")
f.close()
 

バイナリ読み込み

matlabでfwriteで書いたら下記で読める。
データ型で使うのは"i4(int32)"か"f8(float64)"くらい。

<MATLAB>
a=magic(3)
save -mat a.mat a
fid=fopen('magic.bin','w'); fwrite(fid,a,'double'); fclose(fid)

バイナリ経由で読む
import numpy as np
a=np.fromfile('magic.bin',dtype='f8')
b=a.reshape([3,-1], order='F')
#array([[8., 1., 6.],
#       [3., 5., 7.],
#       [4., 9., 2.]])
np.savetxt('b.txt',b,'%16.5e')
 
#save/loadはnumpy専用
np.save('b',b)
c=np.load('b.npy')
 

mat経由で読む
import numpy as np
import scipy.io as scio
 
dic=scio.loadmat('a.mat')
d=dic['a'].astype('f8')
scio.savemat('d.mat',{'d': d})
 


プロットコマンドなど



#exec(open("./read_and_plot.py").read())
import numpy as np
import matplotlib.pyplot as plt
 
f=np.fromfile('f.bin',dtype='f8')
y=np.fromfile('y0o.bin',dtype='f8')
z=np.fromfile('y0n.bin',dtype='f8')
 
plt.rcParams["font.size"] = 14
plt.plot(f,y, "b", label="signal")
plt.plot(f,z, "r", label="noise")
plt.xlim(160, 190)
plt.ylim(0, 5)
 
plt.xlabel("Frequency [Hz]")
plt.ylabel("Spectrum")
plt.legend()
 
plt.savefig("freq.png") 
plt.show()
 

EXE化


Paraview関係

目安箱バナー