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
上一篇下一篇

猜你喜欢

热点阅读