[討論] Cell中每個資料矩陣的非零值求法

看板MATLAB作者 (麗萱小妹)時間7年前 (2017/01/14 14:55), 7年前編輯推噓1(108)
留言9則, 3人參與, 最新討論串1/1
大家好~ 想請問一個問題,我最近因為資料處理的關係,先把都是同樣大小的矩陣存在cell中 接著要判斷每一個cell中的矩陣數值為何並且相加計算方均根 我的code如下 for i = 1:100 I{i} = graypic_imadjust(row,cow) ; every_I(i) = sqrt(mean(find(I{i}).^2)) ; end 但是算出來的數值都非常奇怪,回去看我的變數發現是find(I{i})這裡出問題了 假設我的I{1}= 1 23 0 0 0 0 0 12 0 0 23 0 0 0 2 9 1 0 0 0 1 原本預期find(I{1})出來要是1 23 12 23 2 9 1 1 但是出來的數字卻不對 想問問看是哪裡出錯了,拜託各位了>< -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.131.223 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1484376912.A.580.html ※ 編輯: LSgay5566 (1.164.131.223), 01/14/2017 15:00:31 ※ 編輯: LSgay5566 (1.164.131.223), 01/14/2017 15:02:19

01/14 17:19, , 1F
find給出來的是位置,不是值
01/14 17:19, 1F

01/14 21:21, , 2F
哦哦哦好的~那想請問有什麼辦法求非零值呢><
01/14 21:21, 2F

01/14 23:14, , 3F
cell內所有東東都做相同事情請把迴圈去掉改用cellfun
01/14 23:14, 3F

01/14 23:16, , 4F
你預計要的find(I{i})是I{i}(I{i}~=0)
01/14 23:16, 4F

01/14 23:22, , 5F
所以程式如下所示:
01/14 23:22, 5F

01/14 23:22, , 6F
f = @(x) sqrt(mean( x(x~=0) ));
01/14 23:22, 6F

01/14 23:23, , 7F
every_I = cellfun(@f, I);
01/14 23:23, 7F

01/14 23:24, , 8F
更正,是 every_I = cellfun(f, I);
01/14 23:24, 8F

01/14 23:26, , 9F
或是 cellfun(@(x) sqrt(mean( x(x~=0) )), I);
01/14 23:26, 9F
文章代碼(AID): #1OUSjGM0 (MATLAB)
文章代碼(AID): #1OUSjGM0 (MATLAB)