Mercurial > hg > octave-jordi
comparison src/DLD-FUNCTIONS/find.cc @ 4826:a7b1e6122d0c
[project @ 2004-03-09 19:57:29 by jwe]
author | jwe |
---|---|
date | Tue, 09 Mar 2004 19:57:29 +0000 |
parents | e1c2d8ca8bc0 |
children | c891dd97b837 |
comparison
equal
deleted
inserted
replaced
4825:54e35aa71afd | 4826:a7b1e6122d0c |
---|---|
49 | 49 |
50 if (nda(i) != 0.0) | 50 if (nda(i) != 0.0) |
51 count++; | 51 count++; |
52 } | 52 } |
53 | 53 |
54 if (count == 0) | 54 // If the original argument was a row vector, force a row vector of |
55 return retval; | 55 // the overall indices to be returned. |
56 | 56 |
57 ColumnVector idx (count); | 57 int result_nr = count; |
58 | 58 int result_nc = 1; |
59 ColumnVector i_idx (count); | 59 |
60 ColumnVector j_idx (count); | 60 if (nda.ndims () == 2 && nda.rows () == 1) |
61 | 61 { |
62 T val (dim_vector (count, 1)); | 62 result_nr = 1; |
63 | 63 result_nc = count; |
64 count = 0; | 64 } |
65 | 65 |
66 int nr = nda.rows (); | 66 Matrix idx (result_nr, result_nc); |
67 | 67 |
68 int i = 0; | 68 Matrix i_idx (result_nr, result_nc); |
69 int j = 0; | 69 Matrix j_idx (result_nr, result_nc); |
70 | 70 |
71 for (int k = 0; k < nel; k++) | 71 T val (dim_vector (result_nr, result_nc)); |
72 { | 72 |
73 OCTAVE_QUIT; | 73 if (count > 0) |
74 | 74 { |
75 if (nda(k) != 0.0) | 75 count = 0; |
76 | |
77 int nr = nda.rows (); | |
78 | |
79 int i = 0; | |
80 int j = 0; | |
81 | |
82 for (int k = 0; k < nel; k++) | |
76 { | 83 { |
77 idx(count) = k + 1; | 84 OCTAVE_QUIT; |
78 | 85 |
79 i_idx(count) = i + 1; | 86 if (nda(k) != 0.0) |
80 j_idx(count) = j + 1; | 87 { |
81 | 88 idx(count) = k + 1; |
82 val(count) = nda(k); | 89 |
83 | 90 i_idx(count) = i + 1; |
84 count++; | 91 j_idx(count) = j + 1; |
85 } | 92 |
86 | 93 val(count) = nda(k); |
87 i++; | 94 |
88 | 95 count++; |
89 if (i == nr) | 96 } |
90 { | 97 |
91 i = 0; | 98 i++; |
92 | 99 |
93 j++; | 100 if (i == nr) |
101 { | |
102 i = 0; | |
103 | |
104 j++; | |
105 } | |
94 } | 106 } |
95 } | 107 } |
96 | 108 |
97 switch (nargout) | 109 switch (nargout) |
98 { | 110 { |
99 case 0: | 111 case 0: |
100 case 1: | 112 case 1: |
101 { | 113 retval(0) = idx; |
102 // If the original argument was a row vector, force a row vector of | |
103 // the overall indices to be returned. | |
104 | |
105 if (nda.ndims () == 2 && nda.rows () == 1) | |
106 retval(0) = idx.transpose (); | |
107 else | |
108 retval(0) = idx; | |
109 } | |
110 break; | 114 break; |
111 | 115 |
112 case 3: | 116 case 3: |
113 retval(2) = val; | 117 retval(2) = val; |
114 // Fall through! | 118 // Fall through! |