Re: [問題] 提取矩陣中大於0的數值到另一個矩陣
※ 引述《shadow5402 (shadow5402)》之銘言:
: 假設我目前有一個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
: 請問我是哪裡寫錯了?又該怎麼改呢?
: 謝謝。
你最主要的錯誤是不能用a那個迴圈...
會重複assign x中非零的值到y去
y = zeros(max(sum(x>0)), size(x, 1));
for k = 1:size(x, 2)
tmp = x(:, k) > 0;
if any(tmp)
y(1:sum(tmp), k) = x(tmp, k);
end
end
% 上面迴圈中,可以用另外一個迴圈代替,
% tmp = x(x(k,:) > 0, k);
% for a = 1:length(tmp)
% y(a, k) = tmp(a);
% end
tmp = arrayfun(@(y) y{:}(y{:}~=0), mat2cell(x, size(x, 1), ones(1,
size(x,2))), ...
'UniformOutput', false);
maxSize = max(cellfun(@length, tmp));
y2 = cell2mat(cellfun(@(x) [x; zeros(maxSize-length(x), 1)], tmp, ...
'UniformOutput', false));
isequal(y, y2) % 1
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.205.27.107
※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1430728467.A.BBF.html
※ 編輯: celestialgod (123.205.27.107), 05/04/2015 16:41:38
推
05/04 16:42, , 1F
05/04 16:42, 1F
推
05/04 17:02, , 2F
05/04 17:02, 2F
→
05/04 17:03, , 3F
05/04 17:03, 3F
→
05/04 17:03, , 4F
05/04 17:03, 4F
推
05/04 17:24, , 5F
05/04 17:24, 5F
→
05/04 17:24, , 6F
05/04 17:24, 6F
推
05/04 18:12, , 7F
05/04 18:12, 7F
→
05/04 18:12, , 8F
05/04 18:12, 8F
這部分,很抱歉,我那時候沒很仔細看,沒發現你是要每個column...
我寫成了每個row,我稍作修改之後,就會是正確的結果了
推
05/04 18:16, , 9F
05/04 18:16, 9F
→
05/04 18:17, , 10F
05/04 18:17, 10F
→
05/04 18:17, , 11F
05/04 18:17, 11F
推
05/04 18:26, , 12F
05/04 18:26, 12F
推
05/04 18:32, , 13F
05/04 18:32, 13F
※ 編輯: celestialgod (123.205.27.107), 05/04/2015 18:51:43
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章