标志矩阵,就是返回一个和原始矩阵一样大的矩阵,返回的矩阵里面只有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