matlab - 从矩阵中提取每第 n 列

标签 matlab matrix matrix-indexing submatrix

我需要从我的矩阵中提取每第 n 列。

例如我有一个矩阵:

A =
     1    23    34    53    67    45    67    45
    12    34    45    56    67    87    98    12
     1     2     3    45    56    76    87    56

我想提取每组三列,即每四列删除一次。我的数据应该是这样的:

X =
     1    23    34    67    45    67
    12    34    45    67    87    98
     1     2     3    56    76    87

所以我会跳过第 4 列,然后是第 8 列,依此类推。我知道如何提取每第 n 列和第 n 行,但我不知道如何使用它来获得我需要的东西。

最佳答案

如果你想每四列“保存”一次,那么语法是:

toKeep = 4:4:8;
A = rand(3,8) % Insert your matrix
B = A(:,toKeep);

即您将这些值分配给一个新矩阵。在你的情况下,你想删除它们,因此你可以简单地为这些地方分配一个空矩阵,这实际上删除了它们。

toRemove = 4:4:8; %Every fourth column
A = rand(3,8) % Insert your matrix
A(:,toRemove) = [];

编辑 1

正如 Wolfie 在评论中正确指出的那样,您可以通过将 toRemoveA(:,toRemove) 一起编写并使用 end< 来稍微改进一下 关键字,这样你就有:

A = rand(3,8) % Insert your matrix
A(:,4:4:end) = [];

在这种情况下,您不必担心矩阵的大小。

编辑 2:

这种方法当然也适用于没有句号的一般情况。变量 toRemove 只需要包含要删除的列的索引,例如

toRemove = randperm(8,randi(5)); %Select up to 5 random columns to remove
A = rand(3,8) % Insert your matrix
A(:,toRemove) = [];

附言。如果你想保留原始矩阵,A,你可以先将它分配给B=A;,然后在 B 上执行操作.

关于matlab - 从矩阵中提取每第 n 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50151974/

相关文章:

matrix - 计算给定行向量矩阵的距离矩阵

arrays - 有效拾取包围元素

performance - Matlab:从数组高效生成子数组

matlab - 在 Matlab 中使用指标矩阵创建标签向量

performance - matlab中获取控件底层java组件的快速方法

matrix - 如何使用 m 文件将多个计算输出为矩阵?

android - OpenGL ES 2.0 相机问题

matlab - 仅向耳机的一侧发送音调

java - JTransforms FFT DC 分量与 Matlab 不同

android - 在 Canvas 上旋转、缩放和平移位图