【问题标题】:Splitting a matrix based on its contents in MATLAB根据 MA​​TLAB 中的内容拆分矩阵
【发布时间】:2011-07-25 17:30:01
【问题描述】:

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

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

【问题讨论】:

    标签: matlab indexing matrix vectorization


    【解决方案1】:

    您可以使用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)nth 列转换为逻辑向量。您可以使用v = logical(M(:,n)); 完成相同的操作

    我会推荐这个blog entry 来详细了解逻辑索引。

    更新:

    如果要删除行,请使用:

    M(v,:) = [];
    

    【讨论】:

    • 我的目标是更多:如果这一行的最后一列元素的值为 1,我将从矩阵中删除该行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    相关资源
    最近更新 更多