2013-10-13 74 views
2

我有一個值的向量,它表示要在某個矩陣M(圖像)中刪除的行的索引。這個向量中每列只有一個行值(即如果圖像是128 x 500,我的向量包含500個值)。通過從每個列的可能不同的行中刪除條目來刪除矩陣中的行

我對MATLAB很新穎,所以我不確定是否有更高效的方式從矩陣中去除單個像素(行,列值),所以我來這裏問這個問題。

我正在考慮用一個較少的行製作一個新的矩陣,循環遍歷每一列,直到找到希望刪除其值的行,然後將列向上移動一個,然後移動到下一列做同樣的事情。

有沒有更好的方法?

感謝

回答

4

是的,有避免了循環,並因此更快地編寫和執行解決方案。它利用linear indexing,並利用您可以通過它指定一個空值([])刪除矩陣條目的事實:

% Example data matrix: 
M = [1  5  9 13 17 
    2  6 10 14 18 
    3  7 11 15 19 
    4  8 12 16 20]; 
% Example vector of rows to be removed for each column: 
vector = [2 3 4 1 3]; 

[r c] = size(M); 
ind = sub2ind([r c],vector,1:c); 
M(ind) = []; 
M = reshape(M,r-1,c); 

這給出結果:

>> M = 
    1  5  9 14 17 
    3  6 10 15 18 
    4  8 11 16 20 
+0

+1:打我通過不到一分鐘:-) –

+0

@MohsenNosratinia感謝您的+1!空索引非常有趣:-) –

+0

很好的答案。幸運的是我正在度假。 :p – chappjc