我有一個這樣的矩陣:
1 5 7 3 1 0
1 8 1 0 0 0
2 4 6 2 0 0
2 9 10 2 0 0
0 0 0 0 0 0
我想把它改成...
1 5 7 3 1
1 8 1
2 4 6 2
2 9 10 2
請幫我
uj5u.com熱心網友回復:
對于多樣性,這里有一個不使用回圈的方法:
in = [1 5 7 3 1 0; 1 8 1 0 0 0; 2 4 6 2 0 0; 2 9 10 2 0 0; 0 0 0 0 0 0]; % example data
[~, inds, vals] = find(in.'); % column indices and values of nonzeros of transposed input
result = accumarray(inds, vals, [size(in,1) 1], @(x){x.'}); % group by index
要了解它是如何作業的,您可能需要閱讀find和accumarray函式的檔案以及此答案以了解為什么需要轉置。
uj5u.com熱心網友回復:
如果輸出可以是一個元胞陣列,那么像這樣的事情就可以做到。
% assume input is the first matrix
output = cell(size(input,1), 1);
for i = 1:length(output)
output{i} = input(i, input(i, :) ~= 0);
end
這樣做是創建一個與原始行數相同的元胞陣列,然后遍歷原始陣列,找到非零條目并保留它們。
您可以只保留非零值而不保留任何行資訊,如下所示:
output = input(input ~= 0);
這使用線性索引并將矩陣展平為向量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/393314.html
