Re: [問題] 矩陣正規化多出一堆NaN Inf

看板MATLAB作者 (rabbit)時間13年前 (2012/03/10 11:10), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《seedman (cc)》之銘言: : 我用 : [m n] = size(X); : X = (X - ones(m,1)*mean(X))./(ones(m,1)*std(X)); ^^^^^ : 但是這樣X裡面會多出一堆NaN Inf : 讓我後續的svd不能用 : 可是如果我用zscore(X)就不會有這種情況 : 請問第一種寫法要怎麼改才會對? 因為你有除法 設定上除以0本來就容易出現這些狀況 簡便的作法是std(X)先行另外做,有0再依據你的定義看如何處理 如果你硬要縮成一行 我記得有個函數或是寫法比較好看 但熊熊想不起來 難看一點的寫法就變成這樣了 X1 = (X - ones(m,1)*mean(X))./(ones(m,1)* ( (std(X)==0) + std(X) ) ) 上面的作法是把0的地方取代為1 就不易出現這個問題了... 但上面寫法仍然需要注意精確度的問題 建議還是一步一步判斷比較實際 有時候貪圖字面上的簡潔也不是很好 zscore(X)本身的做法也是一步一步判定有沒有問題 設定上也是將std為0的地方用1取代 看你自己的需求摟... --

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: 111.255.0.111

03/10 14:18, , 1F
這樣子意義一樣嗎?
03/10 14:18, 1F

03/10 19:16, , 2F
哎呀... 就數學上當然不嚴謹... 但你都拿zscore來對照了
03/10 19:16, 2F

03/10 19:17, , 3F
我還能說什麼呢? 一切都是看你的需求阿...
03/10 19:17, 3F
不然我把zscore部分code拿出來你自己看看是不是你要的吧... 天知道你是拿它來做什摸呢? function z = zscore(x) if isequal(x,[]), z = []; return; end sz = size(x); dim = find(sz ~= 1, 1); if isempty(dim), dim = 1; end tile = ones(1,ndims(x)); tile(dim) = sz(dim); warn = warning('off','MATLAB:divideByZero'); xbar = repmat(mean(x), tile); sd = repmat(std(x), tile); warning(warn) sd(sd==0) = 1; z = (x - xbar) ./ sd; 自行參照摟... ※ 編輯: Berger927 來自: 111.255.0.111 (03/10 19:23)

03/11 08:07, , 4F
感謝妳的原始碼 我在研究研究
03/11 08:07, 4F
文章代碼(AID): #1FMiOGMo (MATLAB)
文章代碼(AID): #1FMiOGMo (MATLAB)