我有一个值向量,它表示要在某个矩阵 M(图像)中删除的行的索引。此向量中每列只有一个行值(即,如果图像为 128 x 500,我的向量包含 500 个值)。
我对 MATLAB 很陌生,所以我不确定是否有更有效的方法可以从矩阵中删除单个像素(行、列值),所以我来这里问这个问题。
我正在考虑创建一个少一行的新矩阵,循环遍历每一列,直到找到我希望删除其值的行,然后将列向上“移动”一个,然后移动到下一列做同样的事情.
有没有更好的办法?
谢谢
我有一个值向量,它表示要在某个矩阵 M(图像)中删除的行的索引。此向量中每列只有一个行值(即,如果图像为 128 x 500,我的向量包含 500 个值)。
我对 MATLAB 很陌生,所以我不确定是否有更有效的方法可以从矩阵中删除单个像素(行、列值),所以我来这里问这个问题。
我正在考虑创建一个少一行的新矩阵,循环遍历每一列,直到找到我希望删除其值的行,然后将列向上“移动”一个,然后移动到下一列做同样的事情.
有没有更好的办法?
谢谢
是的,有一种解决方案可以避免循环,因此可以更快地编写和执行。它利用了线性索引,并利用了这样一个事实,即您可以通过为其分配一个空值 ( []
) 来删除矩阵条目:
% 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