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

10 ビュー (過去 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 件のコメント
健気 大川
健気 大川 2021 年 11 月 12 日
ご指摘ありがとうございます。
条件を変更して,A(n+1)-A(n)が0.1より大きいとき別の配列、A(n+1)-A(n)が0.1より小さいとき同じ配列にしたいです。
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}

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!