同じ条件を10行満たした最初の値を抽出する

3 visualizzazioni (ultimi 30 giorni)
namiyama
namiyama il 15 Dic 2022
Modificato: namiyama il 18 Dic 2022
添付したCSVファイルの内から30以下になる値が連続で20回続く最初の値の位置を特定したいです。
似たような質問がありましたが、応用できず質問しました。
よろしくお願いします。

Risposta accettata

交感神経優位なあかべぇ
愚直にfor文を回しました。
csvdata = readtable('https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1231787/test_data.csv');
data = csvdata.value;
seriesNum = 0;
firstIdx = -1; % 最初の位置を格納する変数
for idx = 1 : length(data)
if data(idx) <= 30
seriesNum = seriesNum + 1;
if seriesNum >= 20
firstIdx = (idx - 20 + 1)
break;
end
else
seriesNum = 0;
end
end
firstIdx = 6
if firstIdx > 0
seriesValues = data(firstIdx + [0 : 19]) % 最初の位置から後続20番目までの値の確認
end
seriesValues = 20×1
9.5613 6.9231 9.3532 4.5835 4.7796 14.5454 25.6322 29.8601 29.1462 25.0001
  1 Commento
namiyama
namiyama il 16 Dic 2022
実施できました。分かりやすくありがとうございます。

Accedi per commentare.

Più risposte (1)

Hernia Baby
Hernia Baby il 15 Dic 2022
Modificato: Hernia Baby il 15 Dic 2022
T = readmatrix('https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1231787/test_data.csv');
30以下の数字かつ20行以上続く場合、最初の行番号を抜き出すようにします。
num = myFind(T,30,20,1)
num = 63×1
6 69 128 172 259 367 433 671 701 735
そのときの数字がいくつかは以下のようにすればよいです。
T(num)
ans = 63×1
9.5613 29.6648 28.4386 26.9547 22.3196 28.9476 28.8495 28.7148 23.8581 22.1724
ーーーーーーーーー
関数はこちら
function num = myFind(T,threshold,n,m)
% threshold:閾値
% n:何行続くか
% m:何行目の番号を取得するか
x = T <= threshold;
a = cell2mat(arrayfun(@(t)1:t,diff(find([1 diff(x(:,1)') 1])),'un',0))';
num = find(a==n) - (n-m);
num = num(x(num));
end
  1 Commento
namiyama
namiyama il 16 Dic 2022
Modificato: namiyama il 18 Dic 2022
ご丁寧にありがとうございます。コードがまとまりやすかったです。勉強になりました。

Accedi per commentare.

Categorie

Scopri di più su Logical in Help Center e File Exchange

Prodotti

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!