matlab - 从矩阵中提取每第 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 列和每行,但我不知道如何使用它来获得我需要的东西。
解决方案
如果您想每隔四列“保存”一次,则语法为:
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
。
推荐阅读
- scala - 用于 spark 项目的 sbt jackson 解析器以使用 maxmind 数据库
- virtualization - 在 Ovirt 中配置开放虚拟网络。(OVN)
- java - Android:如何检测 WiFi 是否完全连接?
- java - 我的 HQL 查询有问题 - java
- java - 从片段中移除操作栏的阴影
- scala - Scala:创建基于地图的 UDF
- ansible - 如何在ansible中枚举主机?
- hyperledger-fabric - 作曲家网络启动不工作 v 0.19
- reactjs - ReactJS 为数组上的每个值渲染表
- angular - 如何更改角度4中输入类型=“日期”的输出日期格式?