正の数と負の数が交互に出現するような配列から,各正の数エリアと負の数エリアで絶対値が最大である要素を求めたい.
Show older comments
実現したいこと
[-1, -2, 4, 2, 3, -2, -4, -5, 1, 4, 6, 7]
上記のような正の数と負の数が交互に出現するような配列があった際に,各正の数エリアと負の数エリアで絶対値が最大である要素を求めたいです.
上記配列の場合下記のような配列を想定しています.
[-2, 4, -5, 7]
試したこと
グループ化変数を作成しようと思い,正負で判定したlogical配列を作成しました.(正:1,負:0)
[0, 0, 1, 1, 1, 0, 0, 0, 1, 1, ,1 ,1]
これを下記のように変換できれば,実現できるのではと考えています.
[1, 1, 2, 2, 2, 3, 3, 3, 4, 4, ,4 ,4]
1,2,,3,4への変換が可能な方,「実現したいこと」の内容が実現可能な方,どちらか片方でも構わないのでご教示いただけますと幸いです.
Accepted Answer
More Answers (1)
Atsushi Ueno
on 10 Nov 2022
Edited: Atsushi Ueno
on 10 Nov 2022
> 1,2,,3,4への変換が可能な方 ハイッ (・ω・*∩
零は現れないと想定し「正の数エリア」に含めました。
入力値が負⇒零⇒負と変化する様な場合は、最大値が零の「正の数エリア」が生成されます。
x = [-1, -2, 4, 2, 3, -2, -4, -5, 1, 4, 6, 7];
y_correct = [-2, 4, -5, 7];
sgn = x >= 0 % 符号情報(ゼロ以上:1,負:0)、sign関数は使用しなかった
bnd = [1 abs(diff(sgn))] % 符号が変化する境界を得る
area = cumsum(bnd) % 上記を累積する
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!