Re: [問題] 判斷遞減值中最大的值和位置?已回收
※ 引述《donby (東逼)》之銘言:
: 如題
: 假如我有一串數列
: 假設是 a=[0 0 3 2 1 0 0 1 1 5 4 3 2 1 0 0 7 6 5 4 3 2 1]
(以下恕刪)
找遞減 => 找規律變化的地方 => 找變化的地方 => diff
因此 先對a做diff 可得
b=[0 3 -1 -1 -1 0 1 0 4 -1 -1 -1 -1 -1 0 7 -1 -1 -1 -1 -1 -1]
其中-1為連續遞減發生的位置 其他部份無關 因此再來要將非-1的部份去掉
b_new=[0 0 -1 -1 -1 0 0 0 0 -1 -1 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1]
再來因為是遞減 因此第一項一定是最大的 所以我們再做一次diff
c=[0 -1 0 0 1 0 0 0 -1 0 0 0 0 1 0 -1 0 0 0 0 0]
這裡面-1的位置就是最大值的位置
所以再來我們找出c裡面-1的位置來當做a的index使用
但是由於做過diff 所以在這要把因為diff所少的項加上去
d=find(c==-1)+1;
再用d來當a的 index
整個程式碼就是
clear all;clc;
a=[0 0 3 2 1 0 0 1 1 5 4 3 2 1 0 0 7 6 5 4 3 2 1];
b=diff(a);
b(b~=-1)=0
c=diff(b)
d=find(c==-1)+1;
a(d)
a(d)就會是最大值 d是最大值的位置
如果還要再限定大小 再從a(d)下手就好
--
時の放浪者 (Toki no Hourousha) ----"FF6 Tina's Theme"
遙か遠く 夜を越えて 砂漠の海を 彷徨う
神の聲は 蜃氣樓 忘れられた人々
影は白く 搖らめきたつ 今ひとたびの 幻
蒼く燃える 勇者の夢 永遠に眠る人々
遙か遠く 夜を越えて‧‧‧
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.82.2
→
06/09 02:00, , 1F
06/09 02:00, 1F
針對你的需求 我先改一下a
a=[0 0 5 2 1 0 0 1 1 5 4 3 2 1 0 0 7 5 4 1 0 ];
然後一樣做diff(a)
b=[0 5 -3 -1 -1 0 1 0 4 -1 -1 -1 -1 -1 0 7 -2 -1 -3 -1];
然後找b裡面<0的部份
c=find(b<0);
c=[3 4 5 10 11 12 13 14 17 18 19 20 ];
做到這裡 不知你看出和你原本問題的關係在哪了嗎?
※ 編輯: panzertp 來自: 114.32.82.2 (06/09 02:28)
推
06/09 02:48, , 2F
06/09 02:48, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):