如何在matlab中提取条件矩阵的行

时间:2014-04-17 13:12:06

标签: matlab

假设

  A =  1  0  0
       1  0  1
       0  0  1
       1  0  1
       0  0  0

现在我想在同一行提取第1和第3列值为1的行 即   输出应该是

    1  0  1
    1  0  1

尝试使用A(A(1:end,1)==A(1:end,3)==1),但未获得结果。

3 个答案:

答案 0 :(得分:3)

试试这个:

A(A(:,1) == 1 & A(:,3) == 1, :)

答案 1 :(得分:0)

也许是一个更好的例子 -

A = [
    1  1  0
    1  0  1
    0  0  1
    1  0  1
    0  0  0]

您可以使用ismember -

来获得结果
out = A(ismember(A(:,[1 3]),[1  1],'rows'),:)

输出 -

out =

     1     1     1
     1     0     1
     1     0     1

扩展部分:如果您想将此扩展为更大的案例,请说明A为10x10的案例,并且您希望使用{提取所有行{1}}在1个,3个,6个,8个和9个列号上,所以只需执行此操作 -

ones

答案 2 :(得分:0)

如果您确定A符合逻辑,或者只包含0和1,那么

A(A(:,3) & A(:,1), :)

否则,你需要与1进行明确比较,然后再使用Rafael的解决方案。

链接无法正常工作(您的初始尝试)的原因如下。考虑第一部分:

>> ( A(1:end,1)==A(1:end,3) )
ans =
     0
     1
     0
     1
     1

将此与1进行比较显然会得到相同的结果:

>> ( A(1:end,1)==A(1:end,3) ) == 1
ans =
     0
     1
     0
     1
     1

例如,您并未将与1进行比较,而是将比较的结果与1进行比较。请注意,顺序无关紧要:

>> 1 == A(1:end,1) == A(1:end,3) 
ans =
     0
     1
     0
     1
     1

>> A(1:end,1) == 1 == A(1:end,3) 
ans =
     0
     1
     0
     1
     1