作者Berger927 (rabbit)
看板MATLAB
标题Re: [问题] nan的影响
时间Sat Apr 28 23:34:27 2012
※ 引述《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%。
--
1F:推 ttttt40 :原来我有恋童癖阿...(望向千元钞...02/06 15:45
2F:推 jkn26 :我为什麽比较喜欢鱼 (望向两千元钞...02/06 16:42
3F:→ evilgogo :原来我的鱼控是这样来的啊…(望楼上…02/06 16:55
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.230.96.66
4F:推 Yuccaa:可以善用isnan() 将nan的部分挑出or去掉 04/30 10:21
5F:→ Yuccaa:囧 看到原文里面就有了 我耍笨了 04/30 10:22