【App designer】あ​​る区間のデータから​、該当する区間の回数​を記録するアプリの作​成に​ついて

1 回表示 (過去 30 日間)
RK
RK 2022 年 1 月 25 日
コメント済み: RK 2022 年 1 月 27 日
下記のアプリを作成しています。
①下記のようなデータファイル(プログラム中 app.data)を読み込み
②データの1列目において、値が1以上立ち上がる前の位置から、
 データの2列目において、値が1以上になる位置までの行数を計算
③データの全てにおいて、②を行い、平均の行数(プログラム中 ans)を算出(下記の場合、6.5行となる)
そこで、下記のようなプログラムを検討しています。
df = diff(app.data(:, 1));
idx = find(df >= 1, inf, 'first');
rows = zeros(1, numel(idx));
for n = 1:numel(idx)
checkFlag = find(app.data(idx(n):end, 2) >= 1, 1, 'first');
if isempty(checkFlag)
checkFlag = 0;
end
rows(1, n) = checkFlag;
end
ans = mean(rows)
上記に加え、該当する区間の回数をカウントするような処理を追加したいと考えています。
size関数などを使用することで、上記に追加する形で、修正は可能でしょうか。
よろしくお願いいたします。

採用された回答

Atsushi Ueno
Atsushi Ueno 2022 年 1 月 25 日
1列目の開始地点(n番目)から数えて2列目に終了地点が見つからない場合(isempty(checkFlag))は、以降のrows(1, n)=0に設定するので、rowsの非ゼロ要素をカウントすれば目的の値が得られます。
numel(find(rows))
  4 件のコメント
Atsushi Ueno
Atsushi Ueno 2022 年 1 月 26 日
2列目の終了地点までの間に1列目の値が増えるケースを追加したデータであっても、余分にカウントしなくなるロジックに変更しました。新規変数posの追加と、if文の条件変更&追加が変更点です。
app.data = [0 0 1 1 1 0 0 0 1 1 1 1 0 1 1 1; 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1]';
df = diff(app.data(:, 1));
idx = find(df >= 1, inf, 'first');
rows = zeros(1, numel(idx));
pos = 1; % ←追加:2列目において値が1以上になるインデックス記録用
for n = 1:numel(idx)
checkFlag = find(app.data(idx(n):end, 2) >= 1, 1, 'first');
% 2列目に1以上の値が見つかった時のみ、かつ、開始位置が最後に見つかった場所より後の場合のみ
if ~isempty(checkFlag) && (idx(n) > pos)
rows(1, n) = checkFlag; % 見つかった場所のインデックスを追記する
pos = idx(n) + checkFlag - 1; % 最後に見つかったインデックスを記録する
end
end
% 平均の行数(0は条件が見つからなかったか、開始位置が重複した為平均より除く)
ans = mean(rows(rows~=0))
ans = 6.5000
sum(rows~=0) % 該当する区間の回数カウント結果
ans = 2
RK
RK 2022 年 1 月 27 日
丁寧にご対応いただきありがとうございます。
上記、理解いたしました。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeApp Designer を使用したアプリ開発 についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!