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

13 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
健気 大川
健気 大川 on 12 Nov 2021
ご指摘ありがとうございます。
条件を変更して,A(n+1)-A(n)が0.1より大きいとき別の配列、A(n+1)-A(n)が0.1より小さいとき同じ配列にしたいです。
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}

Categories

Find more on Matrix Indexing in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!