特定の数列から、特定の値を取り出す方法
Show older comments
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
on 12 Nov 2021
>条件としては、A(n+1)-A(n)が0.5より大きいとき別の配列、A(n+1)-A(n)が0.1より小さいとき同じ配列にしたいです。
⇒その条件の間にある時(0.1≦A(n+1)-A(n)≦0.5の時)はどうすれば良いですか?
健気 大川
on 12 Nov 2021
Atsushi Ueno
on 12 Nov 2021
変更された条件を回答に反映しました
Answers (1)
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_value = mat2cell(value, arslen, 1) % 配列を境界index間の長さで分割してセル配列に格納
Categories
Find more on Logical 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!