【问题标题】:Removing a row in a matrix, by removing an entry from a possibly different row for each column通过从每列可能不同的行中删除一个条目来删除矩阵中的一行
【发布时间】:2013-10-13 20:56:22
【问题描述】:

我有一个值向量,它表示要在某个矩阵 M(图像)中删除的行的索引。此向量中每列只有一个行值(即,如果图像为 128 x 500,我的向量包含 500 个值)。

我对 MATLAB 很陌生,所以我不确定是否有更有效的方法可以从矩阵中删除单个像素(行、列值),所以我来这里问一下。

我正在考虑创建一个少一行的新矩阵,循环遍历每一列,直到找到我希望删除其值的行,然后将列向上“移动”一列,然后移动到下一列做同样的事情。

有没有更好的办法?

谢谢

【问题讨论】:

    标签: matlab image-processing matrix


    【解决方案1】:

    是的,有一种解决方案可以避免循环,因此可以更快地编写和执行。它利用了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
    

    【讨论】:

    • @MohsenNosratinia 感谢您的 +1!空索引非常有趣:-)
    • 好答案。你很幸运,我正在度假。 :p
    • @chappjc 所以你也进入这里度假。 StackOverflow 有我们 :-D
    猜你喜欢
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多