matlab - 通过从每列可能不同的行中删除一个条目来删除矩阵中的一行

标签 matlab image-processing matrix

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

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

我正在考虑制作一个少一行的新矩阵,循环遍历每一列,直到找到我想要删除其值的行,并将该列向上“移动”一位,然后移动到下一列做同样的事情。

有更好的方法吗?

谢谢

最佳答案

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

关于matlab - 通过从每列可能不同的行中删除一个条目来删除矩阵中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19350203/

相关文章:

matlab - 如何在MATLAB中实现阶次分析

performance - MATLAB:向量化包含 circshift 的 for 循环

opencv - 在白色背景上检测文本区域时,`cv::findContours`方法无法正常工作。 (OpenCV)

matlab - 如何在 MATLAB 中生成一个随机整数元素在 -3 和 3 之间但不为 0 的矩阵

python - python 中的二维列表数组

matlab - 使用带有 libsvm 的顺序文件系统进行功能选择

matlab - numpy reshape问题(matlab比较)

image-processing - 拉伸(stretch)图像以适合任何四边形

matlab - 具有多个输入矩阵的 block 处理

matlab - Matlab计算左特征向量的精度