[問題] 提取矩陣中大於0的數值到另一個矩陣

看板MATLAB作者 (shadow5402)時間10年前 (2015/05/04 14:57), 10年前編輯推噓2(207)
留言9則, 4人參與, 最新討論串1/2 (看更多)
假設我目前有一個varible x x = 0 0 1 2 0 3 2 0 1 3 0 0 2 0 0 0 我希望將其中不等於0的部分移動到另外一varible y 變成 y = 1 3 1 2 2 3 2 0 目前我的寫法是 for k = 1:4 for a = 1:2 if x(k,1) > 0 y(a,1) = x(k,1); end if x(k,2) > 0 y(a,2) = x(k,2); end if x(k,3) > 0 y(a,3) = x(k,3); end if x(k,4) > 0 y(a,4) = x(k,4); end end end 但結果卻是 y = 2 3 2 2 2 3 2 2 請問我是哪裡寫錯了?又該怎麼改呢? 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.183.173 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1430722675.A.5A4.html

05/04 15:09, , 1F
固定位置或是非0的數量是固定的?
05/04 15:09, 1F
真正打算用的資料中,非0的數量是非固定的 因為是打算整理實驗得到的數據,所以每個數據的位置也不會相同

05/04 15:26, , 2F
不是很瞭解你的y是怎麼塞的 x只有七個非0y怎麼有8個
05/04 15:26, 2F
看起來得到的結果,是把x的每一列中最後一個非0丟到y的對應列中 對不起,我看了一下,原來你指的是我想要的結果。 那個部分的確是我打錯了,謝謝!(已經修正了) ※ 編輯: shadow5402 (140.116.183.173), 05/04/2015 15:29:31 ※ 編輯: shadow5402 (140.116.183.173), 05/04/2015 15:30:33 ※ 編輯: shadow5402 (140.116.183.173), 05/04/2015 15:34:58 ※ 編輯: shadow5402 (140.116.183.173), 05/04/2015 15:35:36

05/04 16:22, , 3F
arrayfun(@(y) y{:}(y{:}~=0), mat2cell(x, ones(1,
05/04 16:22, 3F

05/04 16:23, , 4F
4), 4), 'UniformOutput', false)
05/04 16:23, 4F

05/04 16:23, , 5F
如果等長可以在用cell2mat轉成矩陣
05/04 16:23, 5F

05/04 16:24, , 6F
或是利用cellfun補0補到等長
05/04 16:24, 6F

05/04 16:28, , 7F
迴圈則我用回文好了QQ
05/04 16:28, 7F
好,十分感謝你的幫忙QQ ※ 編輯: shadow5402 (140.116.183.173), 05/04/2015 16:33:08

05/05 09:53, , 8F
你的y明明就有0 這不是自打嘴巴嗎?= =
05/05 09:53, 8F

05/05 11:45, , 9F
原po應該只是想要矩陣的樣子也不知道可以用NA去補
05/05 11:45, 9F
文章代碼(AID): #1LHnXpMa (MATLAB)
文章代碼(AID): #1LHnXpMa (MATLAB)