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

조회 수: 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}

태그

Community Treasure Hunt

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

Start Hunting!