特定の数列から、特定の値を取り出す方法

10 views (last 30 days)
健気 大川
健気 大川 on 12 Nov 2021
Commented: Atsushi Ueno on 12 Nov 2021
A列にフラグとなる数列、B列に取り出したい値があります。このとき、赤と青のように抽出したいです。
条件としては、A(n+1)-A(n)が0.5より大きいとき別の配列、A(n+1)-A(n)が0.1より小さいとき同じ配列にしたいです。
また、出力としては、value(:,1)=[14;34;56;78;24],value(:,2)=[12;32;21;89]としたいです。
どなたか助言お願いいたします。
  3 Comments
Atsushi Ueno
Atsushi Ueno on 12 Nov 2021
変更された条件を回答に反映しました

Sign in to comment.

Answers (1)

Atsushi Ueno
Atsushi Ueno on 12 Nov 2021
Edited: Atsushi Ueno on 12 Nov 2021
flag = (0.001:0.001:0.2)'; % A列にフラグとなる数列(flag)
value = randi(99, [200 1]); % B列に取り出したい値(value)
for i = 21:20:200
flag(i:end) = flag(i:end) + 0.8;
end
scatter(1:200, flag, 5); % ここまで、A列(flag)とB列(value)のサンプルデータを作成しました
>出力としては、value(:,1)=[14;34;56;78;24],value(:,2)=[12;32;21;89]としたいです。
分割した各列の長さは異なる様なので、配列(ベクトル)ではなくセル配列に格納する事をお勧めします。
bnd = find(diff(flag) > 0.1); % A列(flag)の差分が0.1より大きくなる境界のindex
arslen = [bnd(1); diff(bnd); size(flag,1)-bnd(end)]; % 境界index間の長さを取得
divided_flags = mat2cell(flag, arslen, 1) % 配列を境界index間の長さで分割してセル配列に格納
divided_flags = 10×1 cell array
{20×1 double} {20×1 double} {20×1 double} {20×1 double} {20×1 double} {20×1 double} {20×1 double} {20×1 double} {20×1 double} {20×1 double}
divided_value = mat2cell(value, arslen, 1) % 配列を境界index間の長さで分割してセル配列に格納
divided_value = 10×1 cell array
{20×1 double} {20×1 double} {20×1 double} {20×1 double} {20×1 double} {20×1 double} {20×1 double} {20×1 double} {20×1 double} {20×1 double}

Community Treasure Hunt

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

Start Hunting!