[問題] 關於矩陣的元素已回收

看板MATLAB作者 (李崩子)時間13年前 (2010/09/13 17:22), 編輯推噓2(209)
留言11則, 4人參與, 最新討論串1/2 (看更多)
假設我處理出一個矩陣 A= 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 3 0 0 0 0 0 0 4 5 6 有沒有方法可以讓他變成以下這樣 B= 1 0 0 2 3 4 5 6 就是每列都往前遞補到第一行,然後都是0的列就補一個0(為了觀察用的) 有爬過文 有一個頗類似b=a(a~=0)這個 但是碰到矩陣就亂掉了,而且他把0全刪掉 -- -- ▂▂ ▂▂▂ ▂▄▅▅▄▆█ _█◣ ◢ (●) ◣/\\ 丫 │◥  ̄◤ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.215.117

09/13 17:24, , 1F
你的B不是一個矩陣
09/13 17:24, 1F

09/13 17:27, , 2F
對,B最後就非矩陣了,不然後面補0,越搞越複雜哈哈
09/13 17:27, 2F

09/13 19:59, , 3F
不是矩陣就沒辦法作 你要定義清楚才能寫演算法
09/13 19:59, 3F

09/14 02:56, , 4F
當然是呼叫cell 他應該會理你
09/14 02:56, 4F

09/30 14:48, , 5F
使用cell去堆疊每一個row計算的結果
09/30 14:48, 5F

09/30 14:49, , 6F
可以宣告一個Anonymous Function,再搭配cellfun
09/30 14:49, 6F

09/30 14:50, , 7F
最後的計算結果在cell裡每一個element就是你要的結果
09/30 14:50, 7F

09/30 14:50, , 8F
範例如下...
09/30 14:50, 8F

09/30 14:50, , 9F
fun = @(m) [repmat(0,[1 all(m==0)]) m(m~=0)];
09/30 14:50, 9F

09/30 14:53, , 10F
results=cellfun(fun,mat2cell(A,ones(1,size(A,1)),...
09/30 14:53, 10F

09/30 14:56, , 11F
size(A,2)),'uniformoutput',false);
09/30 14:56, 11F
文章代碼(AID): #1CZUqvGy (MATLAB)
文章代碼(AID): #1CZUqvGy (MATLAB)