MATLABスクリプト解読-2
earch_name2 = sprintf('%s.mat',search_name);
sprintfは変数にも出力できる。というのを使っている。
search_name = '20D*';
[filename,pathname] = uigetfile(search_name2, 'Select Oshiro mat file');
Files = dir([pathname,search_name2]);
uigetfile関数のお馴染みの表記
*でヒットしたファイルのパスをリストに格納している。
dirはn行の列ベクトルとして返り値が返ってくる
figure(1)
hold on
グラフを表示するときのおまじない
...
多分改行するけど続けて書く、の意味
grid on
xlim([0 1000])
xlabel('time[us]')
ylabel('噴射率')
grid on は謎。他はmatplotlibに似ている。
MATLABスクリプト解読
clear all;close all;
最初のおまじない
Tkinterのaskdirectoryに相当 uigetfile()
[filename,pathname] = uigetfile('*000.csv', 'Select Oshiro csv file');
ディレクトリ内のファイルの一覧をリストに格納 dir()
Files = dir([pathname,'*000.csv']);
for i = 1:size(Files,1) for文の説明
rootname = regexprep(Files(n).name, '000.csv','');
extension = '.csv';
fprintf('処理中(%g/%g)\n',n,size(Files,1))
disp(['データ名:',rootname])
size(Files,1)の説明 pythonのlen()
sizeがpythonのlen()に相当?matlabのlength()とは何が違う?
size(配列,次元)
size(Files)だとベクトルが返り値になる。
reggexprep() 正規表現を用いたテキストの置換
newStr = regexprep(str,expression,replace)
disp , sprintf , fprintf は何が違ってどう使い分ける?
sprintf or disp - MATLAB Answers - MATLAB Central (mathworks.com)
dispはコマンドウインドウに表示するだけだけどsprintfは変数とかいろんなとこに出力可能(一個目の回答)
変数の値を表示 - MATLAB disp - MathWorks 日本
三つの使いわけ↑dispは%dとかのメタ文字使えない。fprintfは改行\nが必須という違いがある。
disp(['データ名:' , rootname])
中身を配列にしているのは何か意図があるのか?
filename1 = [pathname,rootname,sprintf('00%d',Ich),extension];
ここではsprintfを使って1を01と表示するようにしている。
csvread(filename1, 行オフセット , 列オフセット)
csvreadの2つ目と3つ目の引数の意味
time1 = data1(:,1);
1列目という意味
data1 = data1(:,2:(end-1));
謎。コロン二つで真ん中にカンマ?見たことない
2列目-お尻から1列までという意味
e=d(:,2:3)
2列目から3列目という意味
オブジェクトのインデックスとしてのend
a[1:end]とかb[:,end-1]とか
for文の中のfor文
for i2 = 1:(size(time1,1)-1)
if (time1(i2)<Ioffs_sta)&&(time1(i2+1)>=Ioffs_sta)
Ioffs_sta_id = i2;
elseif (time1(i2)<Ioffs_end)&&(time1(i2+1)>=Ioffs_end)
Ioffs_end_id = i2;
elseif (time1(i2)<Roffs_end)&&(time1(i2+1)>=Roffs_end)
Roffs_end_id = i2;
break
elseif i2 ==(size(time1,1)-1)
disp('エラー1')
end
end
mean(M,1)
行列Mの列ごとの平均を返す。返り値は行ベクトル。
dimension=1に沿ってということらしい、dim1=xだから横に沿ってという思想か?
mean(M,2)
行列Mの行ごとの平均を、返り値列ベクトルとして返す。
size(M)=行の数 , 列の数
の行ベクトルを返す。
offs_val1 = zeros(size(data1));
offs_val4 = zeros(size(data4));
同じサイズの全部ゼロの行列作成。
pythonと違って変数の宣言は省略できないから必要
ちなみにpythonにもnumpyにonesとzerosがある。
offs_val1(:,i) = ones(size(data1,1),1).*offs_data1(1,i);
offs_val1のi列目は
全部1の行ベクトル ドット× offs_dataの一行目のi列目(スカラー)
data1 = data1 - offs_val1;
オフセットする分で全部から引いている
% 時間単位変更(s→us)
time1 = time1.*1000000;
ベクトルとスカラーを掛け合わせるときはなんかこうしている
savename = [pathname,rootname,'.mat'];
pythonで言うos.path.joinは無くて配列みたいに書くだけなのか?
save(savename,'time1','Idata','PVdata','MVdata','Rdata',...
'Idata_ave','PVdata_ave','MVdata_ave','Rdata_ave')
save→変数を保存する関数らしい。...は謎
ディレクトリを聞く(ミニマム)
fTyp = [("", "*")]
iDir = os.path.abspath(os.path.dirname(__file__))
file_name = tkinter.filedialog.askopenfilename(filetypes=fTyp, initialdir=iDir)
matplotlibで横線を引く
ax1.hlines(mean_1,0,20)
ax1.hlines(sen_1_left,0,20)
ax1.hlines(sen_1_right,0,20)
ax2.hlines(mean_2,0,20)
ax2.hlines(sen_2_left,0,20)
ax2.hlines(sen_2_right,0,20)
horizonの略
vlinesもある
hlines(y座標,x_min,x_max)の引数
matplotlibで縦線を引く
ax1.axvline(x=sen_1_left , color="blue", label="meam±3sigma")
ax1.axvline(x=sen_1_right , color="blue")
ax2.axvline(x=sen_2_left , color="orange", label="meam±3sigma")
ax2.axvline(x=sen_2_right , color="orange")
matplotlibテンプレ
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import pandas as pd
import csv
import seaborn as snssns.set_style("white")
sns.set_style("ticks")
sns.set_style({"xtick.direction": "in","ytick.direction": "in"})#plt.rcParams['font.family'] ='sans-serif'
plt.rcParams['font.family'] = "MS Gothic"plt.text(2.5,50,"Hello", color="red", size=16)
plt.rcParams['font.sans-serif'] = ['Arial']
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
plt.rcParams['xtick.major.width'] = 1.0
plt.rcParams['ytick.major.width'] = 1.0
plt.rcParams['font.size'] = 8
plt.rcParams['axes.linewidth'] = 1.0
plt.rcParams['axes.grid']=True
plt.rcParams['grid.linestyle']='--'
plt.rcParams['grid.linewidth'] = 0.3
df=pd.read_csv("result_var")
x=df.temp.values.tolist()
y=df.specific.values.tolist()
plt.plot(x,y,marker="o",linestyle="None")
plt.title("conc_0.025", fontsize=20)
plt.xlabel("Temperature(K)", fontsize=20)
plt.ylabel("Specific heat(J/mol/K)", fontsize=20)
plt.show()