필터 지우기
필터 지우기

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

조회 수: 10 (최근 30일)
namiyama
namiyama 2022년 12월 15일
편집: namiyama 2022년 12월 18일
添付したCSVファイルの内から30以下になる値が連続で20回続く最初の値の位置を特定したいです。
似たような質問がありましたが、応用できず質問しました。
よろしくお願いします。

채택된 답변

交感神経優位なあかべぇ
交感神経優位なあかべぇ 2022년 12월 15일
愚直に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
namiyama
namiyama 2022년 12월 16일
実施できました。分かりやすくありがとうございます。

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Hernia Baby
Hernia Baby 2022년 12월 15일
편집: Hernia Baby 2022년 12월 15일
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
namiyama
namiyama 2022년 12월 16일
편집: namiyama 2022년 12월 18일
ご丁寧にありがとうございます。コードがまとまりやすかったです。勉強になりました。

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 MATLAB 入門에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!