【问题标题】:Find rows of a matrix whose certain columns all match a condition查找某些列都符合条件的矩阵的行
【发布时间】:2020-06-09 07:35:10
【问题描述】:

假设我有一个包含许多行和列的矩阵,例如一个小的子集是:

1     2     3     4     5     6
1     1     5     6     0     0
1     2     2     3     2     1
1     2     0     3     4     5
1     9     5     7     3     0

我想查找其列 #4、#5 和 #6 包含大于零的元素的行,所以在这种情况下我会得到一个像这样的向量:

 1
 3
 4

我尝试过这样使用 find() 函数:

idx = find(y(:, 4:6) > 0)

但我明白了:

 1
 2
 3
 4
 5
 6
 8
 9
10
11
13
14

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您可以像这样使用findall 的组合:

    idx = find(all(y(:,4:6) > 0, 2))
    

    这给出了:

    >> y = [1 2 3 4 5 6; 1 1 5 6 0 0; 1 2 2 3 2 1; 1 2 0 3 4 5; 1 9 5 7 3 0]
    y =
    
       1   2   3   4   5   6
       1   1   5   6   0   0
       1   2   2   3   2   1
       1   2   0   3   4   5
       1   9   5   7   3   0
    
    >> idx = find(all(y(:,4:6) > 0, 2))
    idx =
    
       1
       3
       4
    

    我们的想法是我们提取第 4 到第 6 列,检查哪些值大于 0,使用 AND 条件 (all) 沿第二维进行操作,然后提取其中哪些索引(行)为 1/true得到的列向量。

    【讨论】:

    • 你甚至可以摆脱> 0,因为all已经这样做了。 idx = find(all(y(:,4:6) , 2)) 会很好。
    • 不完全是:all()!= 0 而不是 > 0。如果您的数据中可能包含负值,这会有所不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多