プログラミング関連の備忘録
情報がごちゃごちゃしてきたので自分用の備忘録を作成(随時更新予定)
ファイル入出力関連
バイナリ形式(.dat)でのnumpy配列の入出力
ndarray.tofile('filename.dat', format='%fmt') #filename.datへ書き出し data = np.fromfile('filename.dat') #filename.dat内の配列の読み込み
fmtの形式
format | type(size) |
---|---|
f | float (4 bytes) |
d | double (8 bytes) |
q | signed integer (8bytes) |
Q | unsigned integer(8 bytes) |
i, l | signed integer (4 bytes) |
I, L | unsigned integer (4 bytes) |
h | signed integer (2 bytes) |
H | unsigned integer (2 bytes) |
c | character (bytes of length 1) |
b | signed integer (1 bytes) |
B | unsigned integer (1 bytes) |
s, p | defined char length (ex. 10s) |
バイナリファイルへの数個程度の数値の入出力
from struct import pack, unpack, calcsize a1 = 2017 a2 = 3.1415 a3= 'hello' # これらを書き出す format = 'id5s' #4 bytes signed integer (a1), 8 bytes float (a2), 5 length string (a3) size = calcsize(format) #byteのサイズを取得 b = pack(format, a1, a2, a3.encode()) #a1, a2, a3をバイト型へ変換 f = open('filename.dat', 'wb') #書き出すときは普段のopenでのwではなくwb f.write(b) f.close() #読み込み f = open('filename.dat, 'rb') d = f.read(size) f.close() print(unpack(format, d))
numpy配列のテキストファイルへの出力
np.savetxt('filename.txt', ndarray)
配列の長さを記録しておかないと、たぶん読み込みは面倒くさい(やったことない)
.savファイル読み込み
import scipy.io as sio sav_file_path = 'D:/dir1/dir2/filename.sav' df = sio.readsav(sav_file_name) #clss : 'scipy.io._idl.AttrDict' # df内の配列を取り出すときは辞書のキーを指定(df['flux'])
.cdfファイルの読み込み
import cdflib cdf_filepath = 'D:/dir1/dir2/filename.cdf' data_cdf_read = cdflib.CDF(cdf_filepath) #cdfファイルの読み込み print(data_cdf_read.cdf_info()) # cdfファイルの情報を出力 # データの取得 epoch = data_cdf.varget('epoch') #epoch arrayの取得 var1_data = data_cdf.varget('varname1') data_cdf.close() #ついでに、epochからunix timeへの変換 unix_time = np.array(cdflib.cdfepoch.unixtime(epoch))
Unix time関連
日付からUnixtime、Unix timeから日付への変換
import datetime # 2017年3月27日00:00:00をUnix timeへ変換 unix_t = datetime.datetime(2017,3,27,0,0,0, tzinfo=datetime.timezone.utc).timestamp() #tzinfo=以降を入れないとjstになる #datetime.datetimeクラスに.timestamp()をつける # Unix timeから時刻へ変換 datetime.datetime.fromtimestamp(unix_t, tz=datetime.timezone.utc) # tz=以降を入れないとjstで表示される(めんど) # ちなみに、年数だけとかを取り出すなら、 yyyy = datetime.datetime.fromtimestamp(unix_t).strftime("%Y") #文字列 2017 yyyymmdd = datetime.datetime.fromtimestamp(unix_t).strftime("%Y%m%d") #文字列 20170327
書式コード | 出力 |
---|---|
%Y | yyyy |
%m | mm |
%d | dd |
%H | 時(24時間表記) |
%I | 時(12時間表記) |
%M | 分 |
%S | 秒 |
%f | マイクロ秒(6桁) |
epochからUnix timeへの変換
import cdflib unix_time = np.array(cdflib.cdfepoch.unixtime(epoch)) #epochは配列
グラフ描画関連
複数グラフの全体にタイトル
fig, axs = plt.subplots(nlows=4, ncols=4, sharex=True, sharey=True, figsize=(10, 8)) # 4×4のグラフ fig.suptitle('title', fontsize=10, y=0.9) # fontsizeで文字サイズ、x, y指定でタイトルの位置調整
print出力
printの設定を変える
長めの配列が改行されて比較しづらいときに1行にprintできる文字数の変更等
パラメータ | 内容 |
---|---|
precision | 浮動小数点出力の精度桁数(int or None, default=8) |
threshold | 要約を行う配列要素の総数(int or optional, default=1000) |
edgeitems | 要約を行った配列の前後に出す要素数(default=3) |
linewidth | 1行に出力できる文字数(default=75) |
suppress | Trueだと浮動小数点数は固定小数点表記、Falseだと科学的記法(>1e3, <1e-4の場合)、default=False |
nanstr | not a numberの出力の仕方, default=nan |
infstr | inftyの出力の仕方, default=inf |
sign | +の時、常に正の値の符号, -の時正の値の符号省略、default='-' |
formatter | データのフォーマット指定、default=None |
floatmode | 浮動小数点型の精度オプション |
legacy | print出力のバージョン('1.13'指定でpython 1.13の印刷出力を近似), default=None |
# default print(np.get_printoptions()) # >> {'edgeitems': 3, 'threshold': 1000, 'floatmode': 'maxprec', 'precision': 8, 'suppress': False, 'linewidth': 75, 'nanstr': 'nan', 'infstr': 'inf', 'sign': '-', 'formatter': None, 'legacy': False} # 1行の文字数変更 np.set_printoptions(linewidth=100)
小数点以下の桁数変更
print(format(np.pi, '.2f')) # >> 3.14
出力を上書きする
from IPython.display import clear_output for i in range(10): clear_output(wait=True) print(i) time.sleep(0.5)
その他
複数行を1行に書く
fig = plt.figure(figsize=(8, 4)) ax1 = fig.add_subplot(121, polar=True) ; ax2 = fig.add_subplot(122, polar=True) # 極座標表示されたグラフが横に2枚
IDL
num = n_elements(array) # (arrayの長さ)×16の2次元配列を作成 f1 = fltarr(num, 16) & f2 = fltarr(num, 16) & f3 = fltarr(num, 16) # 成分をすべてNAN(float)埋め f1[*, *] = !VALUES.F_NAN & f2[*, *] = !VALUES.F_NAN & f3[*, *] = !VALUES.F_NAN