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!