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

1 visualización (últimos 30 días)
RK
RK el 25 de En. de 2022
Comentada: RK el 27 de En. de 2022
下記のアプリを作成しています。
①下記のようなデータファイル(プログラム中 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関数などを使用することで、上記に追加する形で、修正は可能でしょうか。
よろしくお願いいたします。

Respuesta aceptada

Atsushi Ueno
Atsushi Ueno el 25 de En. de 2022
1列目の開始地点(n番目)から数えて2列目に終了地点が見つからない場合(isempty(checkFlag))は、以降のrows(1, n)=0に設定するので、rowsの非ゼロ要素をカウントすれば目的の値が得られます。
numel(find(rows))
  4 comentarios
Atsushi Ueno
Atsushi Ueno el 26 de En. de 2022
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 el 27 de En. de 2022
丁寧にご対応いただきありがとうございます。
上記、理解いたしました。

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre App Designer を使用したアプリ開発 en Help Center y File Exchange.

Productos


Versión

R2021a

Community Treasure Hunt

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

Start Hunting!