わかさぎのブログ

プログラミング、Atcoderの勉強とか

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→変数を保存する関数らしい。...は謎

 

 

 

 

 

 

 

 

 

 

matplotlibテンプレ

# -*- coding: utf-8 -*-


import matplotlib.pyplot as plt
import pandas as pd
import csv
import seaborn as sns

sns.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()

 

python3.10の不具合

エラー内容

pipでNumpyがインストールできない。

 

解決策

デフォルトpythonを3.9にしたら直った。

 

visualstudiocodeの左下のpython3.9とか書いてあるところをクリックするとpythonの選択ができる。

 

ANACONDAとの共存

ANACONDAをインストールするときにPATHを通しますかのチェックボックスにチェック入れるのと、デフォルトPYTHONにしますかのチェックボックスを外すのをすべし、これでPIPとCONDAでわけわからなくなるのを回避できる。