标题: MATLAB 中 find 函数的线性索引的使用 [打印本页] 作者: mytomorrow 时间: 2020-1-6 10:30 标题: MATLAB 中 find 函数的线性索引的使用 find & j6 |/ f1 B) V4 a查找非零元素的索引和值 & d# V, _% y4 v) D# } e" n # ?% }8 R* K/ X+ Y1 L 3 I: g: ^( n: I3 ^, [Syntax9 U5 K$ W1 Q# }$ @& }2 t
k = find(X)0 `- n; \( i' O: i; |5 r/ e
$ N( r3 e# s9 t- g
k = find(X,n)! D! p. u2 ] X! [0 `
- Q0 u' m5 K" _4 @' `4 O
k = find(X,n,direction)3 V% _ W0 q, @" t
* p3 `3 S- e# l4 i1 ~! E5 k
[row,col] = find(___) 7 P5 n# v9 h+ I, A, c6 w9 Z6 k: N: c
[row,col,v] = find(___)0 {# Y+ T8 L7 l# l1 `. E/ r
# w x: N$ K0 G# f5 }8 S 8 L6 \2 ]! u! j9 P
Description & T) Q# Z2 ]: h5 O* z4 f1 {5 h3 j5 F& N6 t1 {) p2 T8 O
k = find(X) 返回一个向量, 其中包含数组 x 中每个非零元素的线性索引。* Y8 o) b' }* K. v$ r
* D+ o8 p4 a6 w/ _; d+ v
如果 X 是向量, 则 find 返回与 x 方向相同的向量。% Q! y5 L8 h, y# y
0 s$ k" }4 e- q, A& T
如果 X 是多维数组, 则 find 返回结果的线性索引的列向量。3 c; n9 J- B _! r& u
) V7 t& U$ E: Y1 x3 j
如果 X 不包含非零元素或为空, 则 find 返回空数组。 / J: N" w' x3 F7 R/ m
% W% ^7 {" b4 Q5 ^! g
例子:2 u4 d, y( Y, }+ `; \9 F/ p* I
9 |& b9 F; ]3 s# l, N+ {8 X/ S; WZero and Nonzero Elements in Matrix# g9 U. X. I2 j6 \8 E
) D4 `. g. j5 B
Find the nonzero elements in a 3-by-3 matrix. 8 |, W# j2 K& a9 W+ ^* R / ` }( T8 c2 g+ cX = [1 0 2; 0 1 1; 0 0 4]' A* c1 Y/ J% m
: V: b4 [4 T z9 h
X = 3×3; r' c( m9 y9 d
2 P2 K6 u7 i) L; K% H9 E; ~
1 0 2 6 i8 S/ C7 b" P' U+ A7 }9 ~" H 0 1 1 . P" q3 r) V( r z0 W2 w0 w4 h 0 0 4 h `9 \/ f9 @% Q/ [: f4 z
. _2 Y( j' P' `3 i* Kk = find(X)- G9 s- m* A: Q* f% ~3 ?
* i# ~; |# J4 R# ?% o" j% Fk = 5×1 . ]9 |- v0 f9 B3 B) @. F$ w9 d6 c3 C) k. j. ?
1 ; }" y; E# `0 D7 b7 \ 5: l) p1 \, ~5 e
77 H+ ]: b1 E, o& N: @+ M W
81 c, F2 v2 ~% K$ O
97 [( O/ N: ~; R7 h; U- j* f
$ m( N% Q. b! ] x, m; n* {& ~8 MUse the logical not operator on X to locate the zeros.& Z1 P' { J5 s c
?/ A; [5 _) _( t W
k2 = find(~X)% G/ ?: O" s' H( c# |+ ^ U' `
9 O# l. b7 ?3 @
k2 = 4×1# m3 ^: o& v7 z8 u
$ {9 W, L" T4 K 2; n: T5 h+ P3 ~- ~. c0 G% ^
3 % ]! t' Y/ }' ?4 r1 a) h 4 ! p9 E. p; E H& o7 a 69 g ?1 v' Q5 U9 G: h* s* }% b4 k
. d# [; D2 L3 L: ^8 \. n B2 Ck = find(X,n) 返回与 x 中的非零元素对应的前 n 个索引。 6 q2 l% r, Z* S z" C& c$ P3 M5 Q+ p/ z3 v3 X1 o* Y8 R5 T
例子: 5 N7 z5 D- U3 E0 N& g* m : l5 g! ^$ H( lElements Satisfying a Condition8 w# v% i0 Y% }$ m! E/ p
" @! G, H. c O+ lFind the first five elements that are less than 10 in a 4-by-4 magic square matrix. + U, ]! ]! a' ^1 b) D% d 4 e r" J6 U' T3 a5 uX = magic(4) 9 x, x1 p) N( s7 {. Q6 v# a1 V1 H0 j& @4 d$ ~* r* W
X = 4×4 ! S, A) r7 r6 g' G1 Y; G: }1 q1 E* G! ~" F) ]% e3 L+ \0 q. F
16 2 3 133 |! \4 G7 V4 M) v: C. T
5 11 10 8& I0 ?# k+ b; ^0 c
9 7 6 128 ~: q, }0 `" C$ v4 g, Z( c# w
4 14 15 1 ; W" m7 t5 ?0 ~) b3 g9 B9 l 8 f) R6 r2 C7 W+ a. L$ hk = find(X<10,5) 2 q) L3 [: h& U/ u7 l; h 8 R# Y' w$ K8 K: B( x% Ek = 5×1 + W9 Q0 y- {' y8 f, w/ ] ; n0 z/ R P* ^ 2 * C9 a( H9 \- l& R1 {! U# ` 3 9 l0 t# C4 @ C3 M7 T; ^ 4* F6 p3 i( L9 m- q# S4 C2 x% k
5 . ]5 @! Z$ n8 Y/ p6 K. Y' r8 V 7 + ^+ ^+ M2 Q% |4 g5 a8 M6 u, x. W1 D% ?
View the corresponding elements of X.& f, X: U# ]! H2 B1 l
2 [- b0 ]8 y3 ?- C: B* qX(k)4 F5 s- r' t) d* F
- w! |7 B3 \0 _" H- y3 }. ?ans = 5×1" ~" B$ j& G. x+ |$ _5 x+ \
. X) q& X" [! K/ \( E
5, g, j0 b k+ D( I
9 - W. G9 n$ N0 ?/ Z7 d% m1 W 48 ^ T1 u5 Z/ b7 K9 b- l
2# J$ F7 h3 e4 i, M+ R
7 0 L1 Q0 ~5 P2 ^- x ! f" N& L) X, ?( H P! W+ `k = find(X,n,direction), 如果方向为 "last", 则查找与 x 中的非零元素对应的最后 n 个索引。directionis "first" 的默认值, 它查找与非零元素对应的第一个 n 索引。; T( S0 H0 h' M" C9 \) {6 T g
, C0 A) S- b$ Q! k; Q$ T例子:$ H4 p! l5 R! _1 e
6 W( K! D. e) i3 \Last Several Nonzero Elements5 u+ N7 H% {# O( _
" C( o4 d- d( S$ A
Create a 6-by-6 magic square matrix with all of the odd-indexed elements equal to zero. 1 e- O1 T. |: D/ Q 7 H8 B; G, ~- e8 b8 ?, n. fX = magic(6);: Y% k# A, z: E Y8 W. F! ~
! o* V t% i! q' \- \6 }
X(1:2:end) = 02 t8 r0 v* s6 y+ t4 f( L" \& P
6 q7 |* _) _$ j) Y( |0 m& W+ t, c7 V
X = 6×60 b7 N& l6 X% o/ A+ }
" {, V8 [2 Y8 S8 i! F A
0 0 0 0 0 0 9 n- O0 m8 w6 [, V( k8 F 3 32 7 21 23 25 3 u. S! _0 m& c 0 0 0 0 0 0 - l, ^3 J# v' Z+ Y 8 28 33 17 10 153 n$ u, |8 D. z
0 0 0 0 0 0! r- \7 |6 l6 p6 v; P) U
4 36 29 13 18 11 / u3 | ~; U2 u/ a ) `" `8 h. Z e* O/ Q2 [$ KLocate the last four nonzeros. + T) |! v( L v% ^9 j6 q$ T0 j7 O! U0 P" ~
k = find(X,4,'last')+ R/ B+ V x0 _: M' \6 Z' _
5 o2 I5 s" M+ q
k = 4×11 M/ H5 K7 x r
4 W' y/ l) u2 J0 V1 R8 V, V
30 / v! [* ?0 d/ U 32 2 p1 b6 o( D" z- h; H 343 z2 W9 n7 [/ t( w/ ~
368 g! b1 y9 c8 f& ]
) ^7 o( p4 I# k5 t+ r% h. yx(k)2 {. V, S* C# P: W9 B) D( b: ]
$ n/ w4 ?, ]2 Q
ans =" N- {) i9 A3 h+ L8 q
" x9 m/ A1 F' |' P$ L: w' h$ m
18 % [" F7 v: c& x; y) T# V& {2 E 25" A2 t: A: v2 o( o+ h3 b1 R
150 ] N) u- p! S8 A: v8 K6 Q& I. v7 F
113 [: f( }8 B+ f: E& j/ g, ?
( P; {) [7 `* R
8 k& f2 H5 U% x1 _[row,col] = find(___)使用以前的语法中的任何输入参数返回数组 X 中每个非零元素的行和列下标。$ u: K0 @4 t. C0 a0 \
}$ U, N8 v; D2 S/ M1 ]+ a6 |7 |- N
0 i( R3 @8 G& G' V9 i) `; U Elements Satisfying Multiple Conditions 5 Y$ m- \1 |/ H, ]! X5 S/ x9 j+ c# x1 Y0 F" J+ M
Find the first three elements in a 4-by-4 matrix that are greater than 0 and less than 10. Specify two outputs to return the row and column subscripts to the elements. ( e7 n c$ O+ Z! n1 z2 l. ^4 A. v7 M' G8 x
X = [18 3 1 11; 8 10 11 3; 9 14 6 1; 4 3 15 21] * o& p$ ]0 h6 |; E3 {; o ; }& T& [% o* \* q/ ^& R6 AX = 4×4$ A/ C# ?* G: _4 s. O: ~* x$ T
+ S, R1 L3 Q- U9 R' ]
18 3 1 114 D; H/ |8 Z1 G( @
8 10 11 3 1 `# s x- m( V' |6 a8 R, d 9 14 6 1 4 E2 l1 I' S) g) U" t" a% r) | 4 3 15 214 y5 D7 ~- W0 [1 j' A
; P! v! H% q: f! E% ^# j, C5 S
[row,col] = find(X>0 & X<10,3) 1 r8 ]9 p- ]5 q* U! I + y9 k& c8 S3 `2 \! g% e9 L( u/ ]. ^$ Nrow = 3×16 Z/ Y5 T3 x! N
/ Q. F9 ?; W" r4 s% Z5 `
2 , F1 e1 R- @) ~! n# D6 `. { 3" J+ s$ s- M9 N) C6 w7 G
4 * r0 |7 {; y7 t' k, n* J1 [7 t$ s9 }$ H9 Y: E
col = 3×16 o" `3 u: W! F0 c
. R1 M* x; d- ?) `. v, S- p
1 3 n- S" a R2 N 12 W' N( b5 T5 f9 T- w
1+ \+ l y7 t/ c. I$ H( C' H3 y% |
( L) K, b; Z( p& R7 V t9 GThe first instance is X(2,1), which is 8. 4 n& C! i) J+ J0 a" [0 Z* f / W- M$ K4 o% M3 p[row,col,v] = find(___) 还返回向量 v, 其中包含 x 的非零元素。 ( @' W) U* X; v+ M2 \: {( j \/ }: P$ @5 {" b# A7 |
! f+ T% U% {( X9 }1 ? Subscripts and Values for Nonzero Elements7 ]3 K" q( W. h3 L3 @
5 N3 N8 E A7 E非零元素的下标和值 ; t$ F$ q/ O9 O9 [+ G. o 1 Y' c$ D7 c+ e+ Q' b6 v$ g/ yFind the nonzero elements in a 3-by-3 matrix. Specify three outputs to return the row subscripts, column subscripts, and element values.* M3 y, ^/ u. g2 z
2 A- @' ^* x& g& XX = [3 2 0; -5 0 7; 0 0 1] 1 J2 S! S+ k5 n# ^' i" l% E" m q+ z1 L% R$ K- R, Q2 Y
X = 3×3 ) F$ Q% l8 }+ E% w* b' Z/ x# G+ X- X$ C# ?" J# y) a* o; S/ W. x
3 2 06 w$ S( B s v6 j' A& L
-5 0 7) K. O- |8 G2 q0 M8 N
0 0 1- U: y+ o4 w C# O" M$ F
( n0 Y: z/ K' ~$ t9 ^5 N
[row,col,v] = find(X)% T0 {9 u1 h& l! v) x s
5 Z! P! R5 x4 h5 Z% u; u# u C+ Y% Frow = 5×1 4 t' }& g+ J; K* Z4 ]: W. n+ l7 A 5 q( Y! ^- X" y1 s$ I 1 5 X+ S7 _& o8 {! k& D5 p* J! U6 y+ A 2 : I& v7 k: K1 i5 \& l/ y 14 t/ ]9 B" I1 x+ d* l9 L3 H
2 / n* ~) g/ u" i 3 * a8 D& K* N- M7 |# P: R8 ~+ V + v/ O. k; I Z7 t1 k0 w3 ^col = 5×1 + f7 ?6 m) l, e+ i- q" d$ j & M: }% P8 h6 i! B0 d 1 9 Q! w, j. i# w: |' |& h `9 U 16 o! d0 `3 o1 a4 D, g
2& D" W+ u& c* o; w6 M* C+ L
3$ I7 J: v+ F8 \
3$ t1 g) f: m, M% e% p
2 U+ ~# ~. V& S4 O
v = 5×1 + Q+ U9 B; G. r1 V6 r ) ]2 _0 S1 |5 F 3 % J% b( W( `4 n" s -5 - c; D8 Z2 S, N 2 - V1 I* X4 K; @ 7 ! g; }* e4 n* q( O& t 1 % k5 u3 W- P3 G, p1 s- e- L4 j % [7 V) {- j! n+ n( b0 _8 S % h% M& F# |( r& x% j' L% f. qSubscripts of Multidimensional Array + v' l7 r. G# \; [1 B2 ^+ n: {. N+ g4 F% m
Find the nonzero elements in a 4-by-2-by-3 array. Specify two outputs, row and col, to return the row and column subscripts of the nonzero elements. When the input is a multidimensional array (N > 2), find returns col as a linear index over the N-1 trailing dimensions of X./ d1 K4 @5 U) ?. A+ k j" a3 b3 u
5 ` U0 y' D" x1 _& K
X = zeros(4,2,3); m5 W- t9 n/ ~6 @5 }6 c" T: z8 V& V v: R
X([1 12 19 21]) = 1 6 m& F8 x8 H6 H7 O# F) {4 b9 @3 v. c1 E: O1 n; E+ m$ Z% M, I6 x
X = & Y- g# E, m( P) [9 L6 c8 l h: F' h& F% h. u; N1 t% ^) e6 f
X(:,:,1) =% d7 R/ k" W+ P& w$ `+ i