首页 > 解决方案 > 从矩阵中提取每第 n 列

问题描述

我需要从我的矩阵中提取每个第 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 列和每行,但我不知道如何使用它来获得我需要的东西。

标签: matlabmatrixmatrix-indexingsubmatrix

解决方案


如果您想每隔四列“保存”一次,则语法为:

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

toRemove正如 Wolfie 在评论中正确指出的那样,您可以通过与关键字一起编写A(:,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) = [];

PS。如果要保留原始矩阵,A可以B=A;先将其分配给然后再执行操作B


推荐阅读