在MATLAB中根据其内容拆分矩阵

时间:2011-07-25 17:30:02

标签: matlab indexing matrix vectorization

矩阵有m行n列(n是不超过10的数字),第n列包含1或0(二进制)。我想使用这个二进制作为决定取出相关的行(如果是1,或者如果为0)。我知道这可以通过使用IF条件迭代来完成。

然而,对于行数m达到数百(最多1000)的矩阵,这可能变得不切实际。还有哪些其他程序?

1 个答案:

答案 0 :(得分:4)

您可以使用logical datatypes for indexing。例如,

  

M =

 1     2     0
 4     5     1
 7     8     0
M = [1 2 0;4 5 1;7 8 0];
v = (M(:,n) == 1);
M(v,2) = 1;
  

M =

 1     2     0
 4     1     1
 7     8     0

现在,如果列n中的相应元素为真,则已将第2列中的所有元素设置为1。

请注意,v = (M(:,n) == 1)会将n列转换为逻辑向量。您可以使用v = logical(M(:,n));

完成相同的操作

我建议使用blog entry详细了解逻辑索引。

更新

如果要删除行,请使用:

M(v,:) = [];