わかさぎのブログ

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

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