Matlab从矩阵中找出符合条件的元素

标志矩阵,就是返回一个和原始矩阵一样大的矩阵,返回的矩阵里面只有0和1,1表示符合要求的数字,0表示不符合要求的数字。
以下是一个例子,找出a中所有的偶数

a = magic(6)

a =

    35     1     6    26    19    24
     3    32     7    21    23    25
    31     9     2    22    27    20
     8    28    33    17    10    15
    30     5    34    12    14    16
     4    36    29    13    18    11

>> a_even_logic = mod(a,2)==0

a_even_logic =

     0     0     1     1     0     1
     0     1     0     0     0     0
     0     0     1     1     0     1
     1     1     0     0     1     0
     1     0     1     1     1     1
     1     1     0     0     1     0

class(a_even_logic)

ans =

logical

这时你用a_even_logic 就可以取出 a 中的所有偶数了。

a(a_even_logic)

ans =

     8
    30
     4
    32
    28
    36
     6
     2
    34
    26
    22
    12
    10
    14
    18
    24
    20
    16

而且返回值是按先列后行从上到下的顺序排列的,(tip:我自己一开始经常忘记Matlab运算是先行后列还是先列后行,后来想到线性代数中向量默认是列形式的,所以在矩阵运算中应该是列优先的,就记住了。)
标志矩阵的用途:
1. 用于从矩阵A 产生过滤结果FilterA,利用FilterA去过滤矩阵B,之后取出B的数据
2. 用于多步骤的数据过滤构建,我们经常会遇到一些组合条件来过滤数据,用标志矩阵可以一步一步来构建
例如:从A中取出所有可以被3 整除同时是一个5的倍数的偶数

logic_step1 = mod(a,3)==0;
logic_step2 = mod(a,5) == 0;
logic_step3 = mod(a,2) == 0;
logic_final = logic_step1 & logic_step2 & logic_step3;
 a(logic_final)

ans =

    30

这样写的好处是,可以很方便的检查出每一步是否符合算法的预期设计。
原帖:http://www.ilovematlab.cn/thread-166416-1-1.html

你可能感兴趣的:(matlab)