Mercurial > octave-nkf
comparison liboctave/intNDArray.cc @ 6979:2883ea1c5c18
[project @ 2007-10-08 20:23:48 by dbateman]
author | dbateman |
---|---|
date | Mon, 08 Oct 2007 20:26:01 +0000 |
parents | 7e958a1532c6 |
children | 93c65f2a5668 |
comparison
equal
deleted
inserted
replaced
6978:b75630794a11 | 6979:2883ea1c5c18 |
---|---|
57 if (val != 0.0 && val != 1.0) | 57 if (val != 0.0 && val != 1.0) |
58 return true; | 58 return true; |
59 } | 59 } |
60 | 60 |
61 return false; | 61 return false; |
62 } | |
63 | |
64 | |
65 template <class T> | |
66 intNDArray<T> | |
67 intNDArray<T>::diag (void) const | |
68 { | |
69 return diag (0); | |
70 } | |
71 | |
72 template <class T> | |
73 intNDArray<T> | |
74 intNDArray<T>::diag (octave_idx_type k) const | |
75 { | |
76 dim_vector dv = this->dims (); | |
77 octave_idx_type nd = dv.length (); | |
78 | |
79 if (nd > 2) | |
80 { | |
81 (*current_liboctave_error_handler) ("Matrix must be 2-dimensional"); | |
82 return intNDArray<T>(); | |
83 } | |
84 else | |
85 { | |
86 octave_idx_type nnr = dv (0); | |
87 octave_idx_type nnc = dv (1); | |
88 | |
89 if (k > 0) | |
90 nnc -= k; | |
91 else if (k < 0) | |
92 nnr += k; | |
93 | |
94 intNDArray<T> d; | |
95 | |
96 if (nnr > 0 && nnc > 0) | |
97 { | |
98 octave_idx_type ndiag = (nnr < nnc) ? nnr : nnc; | |
99 | |
100 d.resize (dim_vector (ndiag, 1)); | |
101 | |
102 if (k > 0) | |
103 { | |
104 for (octave_idx_type i = 0; i < ndiag; i++) | |
105 d.xelem (i) = this->elem (i, i+k); | |
106 } | |
107 else if (k < 0) | |
108 { | |
109 for (octave_idx_type i = 0; i < ndiag; i++) | |
110 d.xelem (i) = this->elem (i-k, i); | |
111 } | |
112 else | |
113 { | |
114 for (octave_idx_type i = 0; i < ndiag; i++) | |
115 d.xelem (i) = this->elem (i, i); | |
116 } | |
117 } | |
118 else | |
119 (*current_liboctave_error_handler) | |
120 ("diag: requested diagonal out of range"); | |
121 | |
122 return d; | |
123 } | |
62 } | 124 } |
63 | 125 |
64 // FIXME -- this is not quite the right thing. | 126 // FIXME -- this is not quite the right thing. |
65 | 127 |
66 template <class T> | 128 template <class T> |