我需要从我的矩阵中提取每第 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 在评论中正确指出的那样,您可以通过将 toRemove
与 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) = [];
附言。如果你想保留原始矩阵,A
,你可以先将它分配给B=A;
,然后在 B
上执行操作.
关于matlab - 从矩阵中提取每第 n 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50151974/