Octave之find函数
2018-01-28 本文已影响841人
geekpy
find是Octave的一个内建的函数,用于返回指定条件的element的索引。如果不指定条件,默认返回非空的elements的索引。
参数
find可以接收1个参数,两个参数或者三个参数,其含义如下:
接收一个参数
接收一个参数时,参数为所要搜索的vector或者矩阵
octave:112> test = eye(3)
test =
Diagonal Matrix
1 0 0
0 1 0
0 0 1
octave:113> find(test)
ans =
1
5
9
接收两个参数
接收两个参数,第二个参数为要获取的索引的数量,比如只想获取前两个索引,那么就设为2.
octave:114> find(test, 2)
ans =
1
5
接收三个参数
接收三个参数时,第三个参数为"first" 或者"last",表明是从头开始截取索引,还是从尾开始截取
octave:115> find(test, 2, 'last')
ans =
5
9
返回值
find的返回值也分三种情况:
返回一个vector
如果只返回一个vector,那么会将参数指定的matrix首先按列排序,组成一个大的vector,如下方图1所示
示例:
octave:100> c = eye(2)
c =
Diagonal Matrix
1 0
0 1
octave:101> c(2, 1)
ans = 0
octave:102> c(2, 1) = 1
c =
1 0
1 1
octave:103> find(c)
ans =
1
2
4
从这个例子可以看出find的时候会按照先遍历第一列,再遍历第二列,如此往复,最终返回一个总的索引。
上边的例子其索引如下图所示:
图1: indices
返回两个vector
返回两个vector时,会返回参数matrix的实际行,列索引:
octave:116> z = eye(3)
z =
Diagonal Matrix
1 0 0
0 1 0
0 0 1
octave:117> [i, j] = find(z)
i =
1
2
3
j =
1
2
3
返回三个vector
除返回行列索引外,还会返回其对应的元素值
octave:118> test = [2, 3, 0; 5, 7, 0; 0, 0, 9]
test =
2 3 0
5 7 0
0 0 9
octave:119> [i, j, v] = find(test)
i =
1
2
1
2
3
j =
1
1
2
2
3
v =
2
5
3
7
9
指定条件
我们还可以返回指定条件的元素,而不仅仅是非空元素
octave:118> test = [2, 3, 0; 5, 7, 0; 0, 0, 9]
test =
2 3 0
5 7 0
0 0 9
octave:120> [i, j] = find(test==5)
i = 2
j = 1