Re: [問題] nan的影響

看板MATLAB作者 (rabbit)時間12年前 (2012/04/28 23:34), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/1
※ 引述《y1027330 (leon)》之銘言: : 標題: [問題] nan的影響 : 時間: Sat Apr 28 19:25:04 2012 : : : 我有150筆資料 : : 每筆都是 [1*9000]的矩陣 : : 這150筆資料 中nan的數 不固定 : : 也就是說 第一筆可能有 150個nan 第二筆 可能就有300個nan之類的 : : 我現在想算這150筆資料中 : : 每筆最大10%的數的平均 跟最小10%的數的平均 : : 假設 150筆資料較 a_1 ...... a_150 : : 每個都是 a_1(1,9000) a_2(1,9000)......... : : a=dir(a_*.mat); : : for i=1:150 : : 先單看 i=1 : : a_min=sort(a(i,:)) 把值從小排到大 因為nan會被排在後面 所以下一步 : : a=sum(1:length(a_min)*1/10)/length(a_max)*1/10 : : 做相加的時候 因為取到nan 所以整個變nan : : : : %%%這邊我要算最大10%的平均 : : a=(isnan(a))=0; 因為從大到小 nan就會被排到前面 所以我要把它變成0 : : a_max=sort(a(i,:),'descend') 這樣排完 原本的nan 變成0跑到後面了 : : a=sum(1:length(a_max)*1/10)/length(a_max)*1/10 這是最大10%的平均 : : : 但我假如 我想要取的10% 沒有包括 nan : : 也就是我想去掉nan這個值 然後取剩下的有值的數 : : 最大前10%的平均 跟最小後10%的平均 我該怎麼做阿 : : 不用到cell有機會嗎?? : : : 希望高手能幫忙解決 1000p當作贈禮了 : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.115.120.39 直接把 NaN 拿掉比較快 假定 a = [1 2 3 NaN 5 6 NaN 7 -1 -2] 為內涵 NaN 的矩陣... 小到大為: b=sort(a(~isnan(a))) = -2 -1 1 2 3 5 6 7 大到小為: c=sort(a(~isnan(a)),'descend') = 7 6 5 3 2 1 -1 -2 再取原先數量的前10%就好。 不過要注意陣列大小的改變,以及殘存的個數是否還大於等於原先的10%。 --

02/06 15:45,
原來我有戀童癖阿...(望向千元鈔...
02/06 15:45

02/06 16:42,
我為什麼比較喜歡魚 (望向兩千元鈔...
02/06 16:42

02/06 16:55,
原來我的魚控是這樣來的啊…(望樓上…
02/06 16:55
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.230.96.66

04/30 10:21, , 1F
可以善用isnan() 將nan的部分挑出or去掉
04/30 10:21, 1F

04/30 10:22, , 2F
囧 看到原文裡面就有了 我耍笨了
04/30 10:22, 2F
文章代碼(AID): #1Fd0uDuO (MATLAB)