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

5 ビュー (過去 30 日間)
健気 大川
健気 大川 2021 年 11 月 12 日
コメント済み: Atsushi Ueno 2021 年 11 月 12 日
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 件のコメント
Atsushi Ueno
Atsushi Ueno 2021 年 11 月 12 日
変更された条件を回答に反映しました

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

回答 (1 件)

Atsushi Ueno
Atsushi Ueno 2021 年 11 月 12 日
編集済み: Atsushi Ueno 2021 年 11 月 12 日
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}

カテゴリ

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!