Mercurial > hg > octave-lyh
comparison liboctave/dNDArray.cc @ 5275:23b37da9fd5b
[project @ 2005-04-08 16:07:35 by jwe]
author | jwe |
---|---|
date | Fri, 08 Apr 2005 16:07:37 +0000 |
parents | 57077d0ddc8e |
children | 4c8a2e4e0717 |
comparison
equal
deleted
inserted
replaced
5274:eae7b40388e9 | 5275:23b37da9fd5b |
---|---|
46 dim_vector dv = dims (); | 46 dim_vector dv = dims (); |
47 | 47 |
48 if (dim > dv.length () || dim < 0) | 48 if (dim > dv.length () || dim < 0) |
49 return ComplexNDArray (); | 49 return ComplexNDArray (); |
50 | 50 |
51 int stride = 1; | 51 octave_idx_type stride = 1; |
52 int n = dv(dim); | 52 octave_idx_type n = dv(dim); |
53 | 53 |
54 for (int i = 0; i < dim; i++) | 54 for (int i = 0; i < dim; i++) |
55 stride *= dv(i); | 55 stride *= dv(i); |
56 | 56 |
57 int howmany = numel () / dv (dim); | 57 octave_idx_type howmany = numel () / dv (dim); |
58 howmany = (stride == 1 ? howmany : (howmany > stride ? stride : howmany)); | 58 howmany = (stride == 1 ? howmany : (howmany > stride ? stride : howmany)); |
59 int nloop = (stride == 1 ? 1 : numel () / dv (dim) / stride); | 59 octave_idx_type nloop = (stride == 1 ? 1 : numel () / dv (dim) / stride); |
60 int dist = (stride == 1 ? n : 1); | 60 octave_idx_type dist = (stride == 1 ? n : 1); |
61 | 61 |
62 const double *in (fortran_vec ()); | 62 const double *in (fortran_vec ()); |
63 ComplexNDArray retval (dv); | 63 ComplexNDArray retval (dv); |
64 Complex *out (retval.fortran_vec ()); | 64 Complex *out (retval.fortran_vec ()); |
65 | 65 |
66 // Need to be careful here about the distance between fft's | 66 // Need to be careful here about the distance between fft's |
67 for (int k = 0; k < nloop; k++) | 67 for (octave_idx_type k = 0; k < nloop; k++) |
68 octave_fftw::fft (in + k * stride * n, out + k * stride * n, | 68 octave_fftw::fft (in + k * stride * n, out + k * stride * n, |
69 n, howmany, stride, dist); | 69 n, howmany, stride, dist); |
70 | 70 |
71 return retval; | 71 return retval; |
72 } | 72 } |
77 dim_vector dv = dims (); | 77 dim_vector dv = dims (); |
78 | 78 |
79 if (dim > dv.length () || dim < 0) | 79 if (dim > dv.length () || dim < 0) |
80 return ComplexNDArray (); | 80 return ComplexNDArray (); |
81 | 81 |
82 int stride = 1; | 82 octave_idx_type stride = 1; |
83 int n = dv(dim); | 83 octave_idx_type n = dv(dim); |
84 | 84 |
85 for (int i = 0; i < dim; i++) | 85 for (int i = 0; i < dim; i++) |
86 stride *= dv(i); | 86 stride *= dv(i); |
87 | 87 |
88 int howmany = numel () / dv (dim); | 88 octave_idx_type howmany = numel () / dv (dim); |
89 howmany = (stride == 1 ? howmany : (howmany > stride ? stride : howmany)); | 89 howmany = (stride == 1 ? howmany : (howmany > stride ? stride : howmany)); |
90 int nloop = (stride == 1 ? 1 : numel () / dv (dim) / stride); | 90 octave_idx_type nloop = (stride == 1 ? 1 : numel () / dv (dim) / stride); |
91 int dist = (stride == 1 ? n : 1); | 91 octave_idx_type dist = (stride == 1 ? n : 1); |
92 | 92 |
93 ComplexNDArray retval (*this); | 93 ComplexNDArray retval (*this); |
94 Complex *out (retval.fortran_vec ()); | 94 Complex *out (retval.fortran_vec ()); |
95 | 95 |
96 // Need to be careful here about the distance between fft's | 96 // Need to be careful here about the distance between fft's |
97 for (int k = 0; k < nloop; k++) | 97 for (octave_idx_type k = 0; k < nloop; k++) |
98 octave_fftw::ifft (out + k * stride * n, out + k * stride * n, | 98 octave_fftw::ifft (out + k * stride * n, out + k * stride * n, |
99 n, howmany, stride, dist); | 99 n, howmany, stride, dist); |
100 | 100 |
101 return retval; | 101 return retval; |
102 } | 102 } |
110 | 110 |
111 dim_vector dv2(dv(0), dv(1)); | 111 dim_vector dv2(dv(0), dv(1)); |
112 const double *in = fortran_vec (); | 112 const double *in = fortran_vec (); |
113 ComplexNDArray retval (dv); | 113 ComplexNDArray retval (dv); |
114 Complex *out = retval.fortran_vec (); | 114 Complex *out = retval.fortran_vec (); |
115 int howmany = numel() / dv(0) / dv(1); | 115 octave_idx_type howmany = numel() / dv(0) / dv(1); |
116 int dist = dv(0) * dv(1); | 116 octave_idx_type dist = dv(0) * dv(1); |
117 | 117 |
118 for (int i=0; i < howmany; i++) | 118 for (octave_idx_type i=0; i < howmany; i++) |
119 octave_fftw::fftNd (in + i*dist, out + i*dist, 2, dv2); | 119 octave_fftw::fftNd (in + i*dist, out + i*dist, 2, dv2); |
120 | 120 |
121 return retval; | 121 return retval; |
122 } | 122 } |
123 | 123 |
129 return ComplexNDArray (); | 129 return ComplexNDArray (); |
130 | 130 |
131 dim_vector dv2(dv(0), dv(1)); | 131 dim_vector dv2(dv(0), dv(1)); |
132 ComplexNDArray retval (*this); | 132 ComplexNDArray retval (*this); |
133 Complex *out = retval.fortran_vec (); | 133 Complex *out = retval.fortran_vec (); |
134 int howmany = numel() / dv(0) / dv(1); | 134 octave_idx_type howmany = numel() / dv(0) / dv(1); |
135 int dist = dv(0) * dv(1); | 135 octave_idx_type dist = dv(0) * dv(1); |
136 | 136 |
137 for (int i=0; i < howmany; i++) | 137 for (octave_idx_type i=0; i < howmany; i++) |
138 octave_fftw::ifftNd (out + i*dist, out + i*dist, 2, dv2); | 138 octave_fftw::ifftNd (out + i*dist, out + i*dist, 2, dv2); |
139 | 139 |
140 return retval; | 140 return retval; |
141 } | 141 } |
142 | 142 |
179 // double complex arguments. They have been modified by adding an | 179 // double complex arguments. They have been modified by adding an |
180 // implicit double precision (a-h,o-z) statement at the beginning of | 180 // implicit double precision (a-h,o-z) statement at the beginning of |
181 // each subroutine. | 181 // each subroutine. |
182 | 182 |
183 F77_RET_T | 183 F77_RET_T |
184 F77_FUNC (cffti, CFFTI) (const int&, Complex*); | 184 F77_FUNC (cffti, CFFTI) (const octave_idx_type&, Complex*); |
185 | 185 |
186 F77_RET_T | 186 F77_RET_T |
187 F77_FUNC (cfftf, CFFTF) (const int&, Complex*, Complex*); | 187 F77_FUNC (cfftf, CFFTF) (const octave_idx_type&, Complex*, Complex*); |
188 | 188 |
189 F77_RET_T | 189 F77_RET_T |
190 F77_FUNC (cfftb, CFFTB) (const int&, Complex*, Complex*); | 190 F77_FUNC (cfftb, CFFTB) (const octave_idx_type&, Complex*, Complex*); |
191 } | 191 } |
192 | 192 |
193 ComplexNDArray | 193 ComplexNDArray |
194 NDArray::fourier (int dim) const | 194 NDArray::fourier (int dim) const |
195 { | 195 { |
197 | 197 |
198 if (dim > dv.length () || dim < 0) | 198 if (dim > dv.length () || dim < 0) |
199 return ComplexNDArray (); | 199 return ComplexNDArray (); |
200 | 200 |
201 ComplexNDArray retval (dv); | 201 ComplexNDArray retval (dv); |
202 int npts = dv(dim); | 202 octave_idx_type npts = dv(dim); |
203 int nn = 4*npts+15; | 203 octave_idx_type nn = 4*npts+15; |
204 Array<Complex> wsave (nn); | 204 Array<Complex> wsave (nn); |
205 Complex *pwsave = wsave.fortran_vec (); | 205 Complex *pwsave = wsave.fortran_vec (); |
206 | 206 |
207 OCTAVE_LOCAL_BUFFER (Complex, tmp, npts); | 207 OCTAVE_LOCAL_BUFFER (Complex, tmp, npts); |
208 | 208 |
209 int stride = 1; | 209 octave_idx_type stride = 1; |
210 | 210 |
211 for (int i = 0; i < dim; i++) | 211 for (int i = 0; i < dim; i++) |
212 stride *= dv(i); | 212 stride *= dv(i); |
213 | 213 |
214 int howmany = numel () / npts; | 214 octave_idx_type howmany = numel () / npts; |
215 howmany = (stride == 1 ? howmany : (howmany > stride ? stride : howmany)); | 215 howmany = (stride == 1 ? howmany : (howmany > stride ? stride : howmany)); |
216 int nloop = (stride == 1 ? 1 : numel () / npts / stride); | 216 octave_idx_type nloop = (stride == 1 ? 1 : numel () / npts / stride); |
217 int dist = (stride == 1 ? npts : 1); | 217 octave_idx_type dist = (stride == 1 ? npts : 1); |
218 | 218 |
219 F77_FUNC (cffti, CFFTI) (npts, pwsave); | 219 F77_FUNC (cffti, CFFTI) (npts, pwsave); |
220 | 220 |
221 for (int k = 0; k < nloop; k++) | 221 for (octave_idx_type k = 0; k < nloop; k++) |
222 { | 222 { |
223 for (int j = 0; j < howmany; j++) | 223 for (octave_idx_type j = 0; j < howmany; j++) |
224 { | 224 { |
225 OCTAVE_QUIT; | 225 OCTAVE_QUIT; |
226 | 226 |
227 for (int i = 0; i < npts; i++) | 227 for (octave_idx_type i = 0; i < npts; i++) |
228 tmp[i] = elem((i + k*npts)*stride + j*dist); | 228 tmp[i] = elem((i + k*npts)*stride + j*dist); |
229 | 229 |
230 F77_FUNC (cfftf, CFFTF) (npts, tmp, pwsave); | 230 F77_FUNC (cfftf, CFFTF) (npts, tmp, pwsave); |
231 | 231 |
232 for (int i = 0; i < npts; i++) | 232 for (octave_idx_type i = 0; i < npts; i++) |
233 retval ((i + k*npts)*stride + j*dist) = tmp[i]; | 233 retval ((i + k*npts)*stride + j*dist) = tmp[i]; |
234 } | 234 } |
235 } | 235 } |
236 | 236 |
237 return retval; | 237 return retval; |
244 | 244 |
245 if (dim > dv.length () || dim < 0) | 245 if (dim > dv.length () || dim < 0) |
246 return ComplexNDArray (); | 246 return ComplexNDArray (); |
247 | 247 |
248 ComplexNDArray retval (dv); | 248 ComplexNDArray retval (dv); |
249 int npts = dv(dim); | 249 octave_idx_type npts = dv(dim); |
250 int nn = 4*npts+15; | 250 octave_idx_type nn = 4*npts+15; |
251 Array<Complex> wsave (nn); | 251 Array<Complex> wsave (nn); |
252 Complex *pwsave = wsave.fortran_vec (); | 252 Complex *pwsave = wsave.fortran_vec (); |
253 | 253 |
254 OCTAVE_LOCAL_BUFFER (Complex, tmp, npts); | 254 OCTAVE_LOCAL_BUFFER (Complex, tmp, npts); |
255 | 255 |
256 int stride = 1; | 256 octave_idx_type stride = 1; |
257 | 257 |
258 for (int i = 0; i < dim; i++) | 258 for (int i = 0; i < dim; i++) |
259 stride *= dv(i); | 259 stride *= dv(i); |
260 | 260 |
261 int howmany = numel () / npts; | 261 octave_idx_type howmany = numel () / npts; |
262 howmany = (stride == 1 ? howmany : (howmany > stride ? stride : howmany)); | 262 howmany = (stride == 1 ? howmany : (howmany > stride ? stride : howmany)); |
263 int nloop = (stride == 1 ? 1 : numel () / npts / stride); | 263 octave_idx_type nloop = (stride == 1 ? 1 : numel () / npts / stride); |
264 int dist = (stride == 1 ? npts : 1); | 264 octave_idx_type dist = (stride == 1 ? npts : 1); |
265 | 265 |
266 F77_FUNC (cffti, CFFTI) (npts, pwsave); | 266 F77_FUNC (cffti, CFFTI) (npts, pwsave); |
267 | 267 |
268 for (int k = 0; k < nloop; k++) | 268 for (octave_idx_type k = 0; k < nloop; k++) |
269 { | 269 { |
270 for (int j = 0; j < howmany; j++) | 270 for (octave_idx_type j = 0; j < howmany; j++) |
271 { | 271 { |
272 OCTAVE_QUIT; | 272 OCTAVE_QUIT; |
273 | 273 |
274 for (int i = 0; i < npts; i++) | 274 for (octave_idx_type i = 0; i < npts; i++) |
275 tmp[i] = elem((i + k*npts)*stride + j*dist); | 275 tmp[i] = elem((i + k*npts)*stride + j*dist); |
276 | 276 |
277 F77_FUNC (cfftb, CFFTB) (npts, tmp, pwsave); | 277 F77_FUNC (cfftb, CFFTB) (npts, tmp, pwsave); |
278 | 278 |
279 for (int i = 0; i < npts; i++) | 279 for (octave_idx_type i = 0; i < npts; i++) |
280 retval ((i + k*npts)*stride + j*dist) = tmp[i] / | 280 retval ((i + k*npts)*stride + j*dist) = tmp[i] / |
281 static_cast<double> (npts); | 281 static_cast<double> (npts); |
282 } | 282 } |
283 } | 283 } |
284 | 284 |
290 { | 290 { |
291 dim_vector dv = dims(); | 291 dim_vector dv = dims(); |
292 dim_vector dv2 (dv(0), dv(1)); | 292 dim_vector dv2 (dv(0), dv(1)); |
293 int rank = 2; | 293 int rank = 2; |
294 ComplexNDArray retval (*this); | 294 ComplexNDArray retval (*this); |
295 int stride = 1; | 295 octave_idx_type stride = 1; |
296 | 296 |
297 for (int i = 0; i < rank; i++) | 297 for (int i = 0; i < rank; i++) |
298 { | 298 { |
299 int npts = dv2(i); | 299 octave_idx_type npts = dv2(i); |
300 int nn = 4*npts+15; | 300 octave_idx_type nn = 4*npts+15; |
301 Array<Complex> wsave (nn); | 301 Array<Complex> wsave (nn); |
302 Complex *pwsave = wsave.fortran_vec (); | 302 Complex *pwsave = wsave.fortran_vec (); |
303 Array<Complex> row (npts); | 303 Array<Complex> row (npts); |
304 Complex *prow = row.fortran_vec (); | 304 Complex *prow = row.fortran_vec (); |
305 | 305 |
306 int howmany = numel () / npts; | 306 octave_idx_type howmany = numel () / npts; |
307 howmany = (stride == 1 ? howmany : | 307 howmany = (stride == 1 ? howmany : |
308 (howmany > stride ? stride : howmany)); | 308 (howmany > stride ? stride : howmany)); |
309 int nloop = (stride == 1 ? 1 : numel () / npts / stride); | 309 octave_idx_type nloop = (stride == 1 ? 1 : numel () / npts / stride); |
310 int dist = (stride == 1 ? npts : 1); | 310 octave_idx_type dist = (stride == 1 ? npts : 1); |
311 | 311 |
312 F77_FUNC (cffti, CFFTI) (npts, pwsave); | 312 F77_FUNC (cffti, CFFTI) (npts, pwsave); |
313 | 313 |
314 for (int k = 0; k < nloop; k++) | 314 for (octave_idx_type k = 0; k < nloop; k++) |
315 { | 315 { |
316 for (int j = 0; j < howmany; j++) | 316 for (octave_idx_type j = 0; j < howmany; j++) |
317 { | 317 { |
318 OCTAVE_QUIT; | 318 OCTAVE_QUIT; |
319 | 319 |
320 for (int l = 0; l < npts; l++) | 320 for (octave_idx_type l = 0; l < npts; l++) |
321 prow[l] = retval ((l + k*npts)*stride + j*dist); | 321 prow[l] = retval ((l + k*npts)*stride + j*dist); |
322 | 322 |
323 F77_FUNC (cfftf, CFFTF) (npts, prow, pwsave); | 323 F77_FUNC (cfftf, CFFTF) (npts, prow, pwsave); |
324 | 324 |
325 for (int l = 0; l < npts; l++) | 325 for (octave_idx_type l = 0; l < npts; l++) |
326 retval ((l + k*npts)*stride + j*dist) = prow[l]; | 326 retval ((l + k*npts)*stride + j*dist) = prow[l]; |
327 } | 327 } |
328 } | 328 } |
329 | 329 |
330 stride *= dv2(i); | 330 stride *= dv2(i); |
338 { | 338 { |
339 dim_vector dv = dims(); | 339 dim_vector dv = dims(); |
340 dim_vector dv2 (dv(0), dv(1)); | 340 dim_vector dv2 (dv(0), dv(1)); |
341 int rank = 2; | 341 int rank = 2; |
342 ComplexNDArray retval (*this); | 342 ComplexNDArray retval (*this); |
343 int stride = 1; | 343 octave_idx_type stride = 1; |
344 | 344 |
345 for (int i = 0; i < rank; i++) | 345 for (int i = 0; i < rank; i++) |
346 { | 346 { |
347 int npts = dv2(i); | 347 octave_idx_type npts = dv2(i); |
348 int nn = 4*npts+15; | 348 octave_idx_type nn = 4*npts+15; |
349 Array<Complex> wsave (nn); | 349 Array<Complex> wsave (nn); |
350 Complex *pwsave = wsave.fortran_vec (); | 350 Complex *pwsave = wsave.fortran_vec (); |
351 Array<Complex> row (npts); | 351 Array<Complex> row (npts); |
352 Complex *prow = row.fortran_vec (); | 352 Complex *prow = row.fortran_vec (); |
353 | 353 |
354 int howmany = numel () / npts; | 354 octave_idx_type howmany = numel () / npts; |
355 howmany = (stride == 1 ? howmany : | 355 howmany = (stride == 1 ? howmany : |
356 (howmany > stride ? stride : howmany)); | 356 (howmany > stride ? stride : howmany)); |
357 int nloop = (stride == 1 ? 1 : numel () / npts / stride); | 357 octave_idx_type nloop = (stride == 1 ? 1 : numel () / npts / stride); |
358 int dist = (stride == 1 ? npts : 1); | 358 octave_idx_type dist = (stride == 1 ? npts : 1); |
359 | 359 |
360 F77_FUNC (cffti, CFFTI) (npts, pwsave); | 360 F77_FUNC (cffti, CFFTI) (npts, pwsave); |
361 | 361 |
362 for (int k = 0; k < nloop; k++) | 362 for (octave_idx_type k = 0; k < nloop; k++) |
363 { | 363 { |
364 for (int j = 0; j < howmany; j++) | 364 for (octave_idx_type j = 0; j < howmany; j++) |
365 { | 365 { |
366 OCTAVE_QUIT; | 366 OCTAVE_QUIT; |
367 | 367 |
368 for (int l = 0; l < npts; l++) | 368 for (octave_idx_type l = 0; l < npts; l++) |
369 prow[l] = retval ((l + k*npts)*stride + j*dist); | 369 prow[l] = retval ((l + k*npts)*stride + j*dist); |
370 | 370 |
371 F77_FUNC (cfftb, CFFTB) (npts, prow, pwsave); | 371 F77_FUNC (cfftb, CFFTB) (npts, prow, pwsave); |
372 | 372 |
373 for (int l = 0; l < npts; l++) | 373 for (octave_idx_type l = 0; l < npts; l++) |
374 retval ((l + k*npts)*stride + j*dist) = prow[l] / | 374 retval ((l + k*npts)*stride + j*dist) = prow[l] / |
375 static_cast<double> (npts); | 375 static_cast<double> (npts); |
376 } | 376 } |
377 } | 377 } |
378 | 378 |
386 NDArray::fourierNd (void) const | 386 NDArray::fourierNd (void) const |
387 { | 387 { |
388 dim_vector dv = dims (); | 388 dim_vector dv = dims (); |
389 int rank = dv.length (); | 389 int rank = dv.length (); |
390 ComplexNDArray retval (*this); | 390 ComplexNDArray retval (*this); |
391 int stride = 1; | 391 octave_idx_type stride = 1; |
392 | 392 |
393 for (int i = 0; i < rank; i++) | 393 for (int i = 0; i < rank; i++) |
394 { | 394 { |
395 int npts = dv(i); | 395 octave_idx_type npts = dv(i); |
396 int nn = 4*npts+15; | 396 octave_idx_type nn = 4*npts+15; |
397 Array<Complex> wsave (nn); | 397 Array<Complex> wsave (nn); |
398 Complex *pwsave = wsave.fortran_vec (); | 398 Complex *pwsave = wsave.fortran_vec (); |
399 Array<Complex> row (npts); | 399 Array<Complex> row (npts); |
400 Complex *prow = row.fortran_vec (); | 400 Complex *prow = row.fortran_vec (); |
401 | 401 |
402 int howmany = numel () / npts; | 402 octave_idx_type howmany = numel () / npts; |
403 howmany = (stride == 1 ? howmany : | 403 howmany = (stride == 1 ? howmany : |
404 (howmany > stride ? stride : howmany)); | 404 (howmany > stride ? stride : howmany)); |
405 int nloop = (stride == 1 ? 1 : numel () / npts / stride); | 405 octave_idx_type nloop = (stride == 1 ? 1 : numel () / npts / stride); |
406 int dist = (stride == 1 ? npts : 1); | 406 octave_idx_type dist = (stride == 1 ? npts : 1); |
407 | 407 |
408 F77_FUNC (cffti, CFFTI) (npts, pwsave); | 408 F77_FUNC (cffti, CFFTI) (npts, pwsave); |
409 | 409 |
410 for (int k = 0; k < nloop; k++) | 410 for (octave_idx_type k = 0; k < nloop; k++) |
411 { | 411 { |
412 for (int j = 0; j < howmany; j++) | 412 for (octave_idx_type j = 0; j < howmany; j++) |
413 { | 413 { |
414 OCTAVE_QUIT; | 414 OCTAVE_QUIT; |
415 | 415 |
416 for (int l = 0; l < npts; l++) | 416 for (octave_idx_type l = 0; l < npts; l++) |
417 prow[l] = retval ((l + k*npts)*stride + j*dist); | 417 prow[l] = retval ((l + k*npts)*stride + j*dist); |
418 | 418 |
419 F77_FUNC (cfftf, CFFTF) (npts, prow, pwsave); | 419 F77_FUNC (cfftf, CFFTF) (npts, prow, pwsave); |
420 | 420 |
421 for (int l = 0; l < npts; l++) | 421 for (octave_idx_type l = 0; l < npts; l++) |
422 retval ((l + k*npts)*stride + j*dist) = prow[l]; | 422 retval ((l + k*npts)*stride + j*dist) = prow[l]; |
423 } | 423 } |
424 } | 424 } |
425 | 425 |
426 stride *= dv(i); | 426 stride *= dv(i); |
433 NDArray::ifourierNd (void) const | 433 NDArray::ifourierNd (void) const |
434 { | 434 { |
435 dim_vector dv = dims (); | 435 dim_vector dv = dims (); |
436 int rank = dv.length (); | 436 int rank = dv.length (); |
437 ComplexNDArray retval (*this); | 437 ComplexNDArray retval (*this); |
438 int stride = 1; | 438 octave_idx_type stride = 1; |
439 | 439 |
440 for (int i = 0; i < rank; i++) | 440 for (int i = 0; i < rank; i++) |
441 { | 441 { |
442 int npts = dv(i); | 442 octave_idx_type npts = dv(i); |
443 int nn = 4*npts+15; | 443 octave_idx_type nn = 4*npts+15; |
444 Array<Complex> wsave (nn); | 444 Array<Complex> wsave (nn); |
445 Complex *pwsave = wsave.fortran_vec (); | 445 Complex *pwsave = wsave.fortran_vec (); |
446 Array<Complex> row (npts); | 446 Array<Complex> row (npts); |
447 Complex *prow = row.fortran_vec (); | 447 Complex *prow = row.fortran_vec (); |
448 | 448 |
449 int howmany = numel () / npts; | 449 octave_idx_type howmany = numel () / npts; |
450 howmany = (stride == 1 ? howmany : | 450 howmany = (stride == 1 ? howmany : |
451 (howmany > stride ? stride : howmany)); | 451 (howmany > stride ? stride : howmany)); |
452 int nloop = (stride == 1 ? 1 : numel () / npts / stride); | 452 octave_idx_type nloop = (stride == 1 ? 1 : numel () / npts / stride); |
453 int dist = (stride == 1 ? npts : 1); | 453 octave_idx_type dist = (stride == 1 ? npts : 1); |
454 | 454 |
455 F77_FUNC (cffti, CFFTI) (npts, pwsave); | 455 F77_FUNC (cffti, CFFTI) (npts, pwsave); |
456 | 456 |
457 for (int k = 0; k < nloop; k++) | 457 for (octave_idx_type k = 0; k < nloop; k++) |
458 { | 458 { |
459 for (int j = 0; j < howmany; j++) | 459 for (octave_idx_type j = 0; j < howmany; j++) |
460 { | 460 { |
461 OCTAVE_QUIT; | 461 OCTAVE_QUIT; |
462 | 462 |
463 for (int l = 0; l < npts; l++) | 463 for (octave_idx_type l = 0; l < npts; l++) |
464 prow[l] = retval ((l + k*npts)*stride + j*dist); | 464 prow[l] = retval ((l + k*npts)*stride + j*dist); |
465 | 465 |
466 F77_FUNC (cfftb, CFFTB) (npts, prow, pwsave); | 466 F77_FUNC (cfftb, CFFTB) (npts, prow, pwsave); |
467 | 467 |
468 for (int l = 0; l < npts; l++) | 468 for (octave_idx_type l = 0; l < npts; l++) |
469 retval ((l + k*npts)*stride + j*dist) = prow[l] / | 469 retval ((l + k*npts)*stride + j*dist) = prow[l] / |
470 static_cast<double> (npts); | 470 static_cast<double> (npts); |
471 } | 471 } |
472 } | 472 } |
473 | 473 |
484 boolNDArray | 484 boolNDArray |
485 NDArray::operator ! (void) const | 485 NDArray::operator ! (void) const |
486 { | 486 { |
487 boolNDArray b (dims ()); | 487 boolNDArray b (dims ()); |
488 | 488 |
489 for (int i = 0; i < length (); i++) | 489 for (octave_idx_type i = 0; i < length (); i++) |
490 b.elem (i) = ! elem (i); | 490 b.elem (i) = ! elem (i); |
491 | 491 |
492 return b; | 492 return b; |
493 } | 493 } |
494 | 494 |
495 bool | 495 bool |
496 NDArray::any_element_is_negative (bool neg_zero) const | 496 NDArray::any_element_is_negative (bool neg_zero) const |
497 { | 497 { |
498 int nel = nelem (); | 498 octave_idx_type nel = nelem (); |
499 | 499 |
500 if (neg_zero) | 500 if (neg_zero) |
501 { | 501 { |
502 for (int i = 0; i < nel; i++) | 502 for (octave_idx_type i = 0; i < nel; i++) |
503 if (lo_ieee_signbit (elem (i))) | 503 if (lo_ieee_signbit (elem (i))) |
504 return true; | 504 return true; |
505 } | 505 } |
506 else | 506 else |
507 { | 507 { |
508 for (int i = 0; i < nel; i++) | 508 for (octave_idx_type i = 0; i < nel; i++) |
509 if (elem (i) < 0) | 509 if (elem (i) < 0) |
510 return true; | 510 return true; |
511 } | 511 } |
512 | 512 |
513 return false; | 513 return false; |
515 | 515 |
516 | 516 |
517 bool | 517 bool |
518 NDArray::any_element_is_inf_or_nan (void) const | 518 NDArray::any_element_is_inf_or_nan (void) const |
519 { | 519 { |
520 int nel = nelem (); | 520 octave_idx_type nel = nelem (); |
521 | 521 |
522 for (int i = 0; i < nel; i++) | 522 for (octave_idx_type i = 0; i < nel; i++) |
523 { | 523 { |
524 double val = elem (i); | 524 double val = elem (i); |
525 if (xisinf (val) || xisnan (val)) | 525 if (xisinf (val) || xisnan (val)) |
526 return true; | 526 return true; |
527 } | 527 } |
530 } | 530 } |
531 | 531 |
532 bool | 532 bool |
533 NDArray::all_elements_are_int_or_inf_or_nan (void) const | 533 NDArray::all_elements_are_int_or_inf_or_nan (void) const |
534 { | 534 { |
535 int nel = nelem (); | 535 octave_idx_type nel = nelem (); |
536 | 536 |
537 for (int i = 0; i < nel; i++) | 537 for (octave_idx_type i = 0; i < nel; i++) |
538 { | 538 { |
539 double val = elem (i); | 539 double val = elem (i); |
540 if (xisnan (val) || D_NINT (val) == val) | 540 if (xisnan (val) || D_NINT (val) == val) |
541 continue; | 541 continue; |
542 else | 542 else |
550 // the largest and smallest values and return them in MAX_VAL and MIN_VAL. | 550 // the largest and smallest values and return them in MAX_VAL and MIN_VAL. |
551 | 551 |
552 bool | 552 bool |
553 NDArray::all_integers (double& max_val, double& min_val) const | 553 NDArray::all_integers (double& max_val, double& min_val) const |
554 { | 554 { |
555 int nel = nelem (); | 555 octave_idx_type nel = nelem (); |
556 | 556 |
557 if (nel > 0) | 557 if (nel > 0) |
558 { | 558 { |
559 max_val = elem (0); | 559 max_val = elem (0); |
560 min_val = elem (0); | 560 min_val = elem (0); |
561 } | 561 } |
562 else | 562 else |
563 return false; | 563 return false; |
564 | 564 |
565 for (int i = 0; i < nel; i++) | 565 for (octave_idx_type i = 0; i < nel; i++) |
566 { | 566 { |
567 double val = elem (i); | 567 double val = elem (i); |
568 | 568 |
569 if (val > max_val) | 569 if (val > max_val) |
570 max_val = val; | 570 max_val = val; |
580 } | 580 } |
581 | 581 |
582 bool | 582 bool |
583 NDArray::too_large_for_float (void) const | 583 NDArray::too_large_for_float (void) const |
584 { | 584 { |
585 int nel = nelem (); | 585 octave_idx_type nel = nelem (); |
586 | 586 |
587 for (int i = 0; i < nel; i++) | 587 for (octave_idx_type i = 0; i < nel; i++) |
588 { | 588 { |
589 double val = elem (i); | 589 double val = elem (i); |
590 | 590 |
591 if (val > FLT_MAX || val < FLT_MIN) | 591 if (val > FLT_MAX || val < FLT_MIN) |
592 return true; | 592 return true; |
642 } | 642 } |
643 | 643 |
644 NDArray | 644 NDArray |
645 NDArray::max (int dim) const | 645 NDArray::max (int dim) const |
646 { | 646 { |
647 ArrayN<int> dummy_idx; | 647 ArrayN<octave_idx_type> dummy_idx; |
648 return max (dummy_idx, dim); | 648 return max (dummy_idx, dim); |
649 } | 649 } |
650 | 650 |
651 NDArray | 651 NDArray |
652 NDArray::max (ArrayN<int>& idx_arg, int dim) const | 652 NDArray::max (ArrayN<octave_idx_type>& idx_arg, int dim) const |
653 { | 653 { |
654 dim_vector dv = dims (); | 654 dim_vector dv = dims (); |
655 dim_vector dr = dims (); | 655 dim_vector dr = dims (); |
656 | 656 |
657 if (dv.numel () == 0 || dim > dv.length () || dim < 0) | 657 if (dv.numel () == 0 || dim > dv.length () || dim < 0) |
660 dr(dim) = 1; | 660 dr(dim) = 1; |
661 | 661 |
662 NDArray result (dr); | 662 NDArray result (dr); |
663 idx_arg.resize (dr); | 663 idx_arg.resize (dr); |
664 | 664 |
665 int x_stride = 1; | 665 octave_idx_type x_stride = 1; |
666 int x_len = dv(dim); | 666 octave_idx_type x_len = dv(dim); |
667 for (int i = 0; i < dim; i++) | 667 for (int i = 0; i < dim; i++) |
668 x_stride *= dv(i); | 668 x_stride *= dv(i); |
669 | 669 |
670 for (int i = 0; i < dr.numel (); i++) | 670 for (octave_idx_type i = 0; i < dr.numel (); i++) |
671 { | 671 { |
672 int x_offset; | 672 octave_idx_type x_offset; |
673 if (x_stride == 1) | 673 if (x_stride == 1) |
674 x_offset = i * x_len; | 674 x_offset = i * x_len; |
675 else | 675 else |
676 { | 676 { |
677 int x_offset2 = 0; | 677 octave_idx_type x_offset2 = 0; |
678 x_offset = i; | 678 x_offset = i; |
679 while (x_offset >= x_stride) | 679 while (x_offset >= x_stride) |
680 { | 680 { |
681 x_offset -= x_stride; | 681 x_offset -= x_stride; |
682 x_offset2++; | 682 x_offset2++; |
683 } | 683 } |
684 x_offset += x_offset2 * x_stride * x_len; | 684 x_offset += x_offset2 * x_stride * x_len; |
685 } | 685 } |
686 | 686 |
687 int idx_j; | 687 octave_idx_type idx_j; |
688 | 688 |
689 double tmp_max = octave_NaN; | 689 double tmp_max = octave_NaN; |
690 | 690 |
691 for (idx_j = 0; idx_j < x_len; idx_j++) | 691 for (idx_j = 0; idx_j < x_len; idx_j++) |
692 { | 692 { |
694 | 694 |
695 if (! octave_is_NaN_or_NA (tmp_max)) | 695 if (! octave_is_NaN_or_NA (tmp_max)) |
696 break; | 696 break; |
697 } | 697 } |
698 | 698 |
699 for (int j = idx_j+1; j < x_len; j++) | 699 for (octave_idx_type j = idx_j+1; j < x_len; j++) |
700 { | 700 { |
701 double tmp = elem (j * x_stride + x_offset); | 701 double tmp = elem (j * x_stride + x_offset); |
702 | 702 |
703 if (octave_is_NaN_or_NA (tmp)) | 703 if (octave_is_NaN_or_NA (tmp)) |
704 continue; | 704 continue; |
717 } | 717 } |
718 | 718 |
719 NDArray | 719 NDArray |
720 NDArray::min (int dim) const | 720 NDArray::min (int dim) const |
721 { | 721 { |
722 ArrayN<int> dummy_idx; | 722 ArrayN<octave_idx_type> dummy_idx; |
723 return min (dummy_idx, dim); | 723 return min (dummy_idx, dim); |
724 } | 724 } |
725 | 725 |
726 NDArray | 726 NDArray |
727 NDArray::min (ArrayN<int>& idx_arg, int dim) const | 727 NDArray::min (ArrayN<octave_idx_type>& idx_arg, int dim) const |
728 { | 728 { |
729 dim_vector dv = dims (); | 729 dim_vector dv = dims (); |
730 dim_vector dr = dims (); | 730 dim_vector dr = dims (); |
731 | 731 |
732 if (dv.numel () == 0 || dim > dv.length () || dim < 0) | 732 if (dv.numel () == 0 || dim > dv.length () || dim < 0) |
735 dr(dim) = 1; | 735 dr(dim) = 1; |
736 | 736 |
737 NDArray result (dr); | 737 NDArray result (dr); |
738 idx_arg.resize (dr); | 738 idx_arg.resize (dr); |
739 | 739 |
740 int x_stride = 1; | 740 octave_idx_type x_stride = 1; |
741 int x_len = dv(dim); | 741 octave_idx_type x_len = dv(dim); |
742 for (int i = 0; i < dim; i++) | 742 for (int i = 0; i < dim; i++) |
743 x_stride *= dv(i); | 743 x_stride *= dv(i); |
744 | 744 |
745 for (int i = 0; i < dr.numel (); i++) | 745 for (octave_idx_type i = 0; i < dr.numel (); i++) |
746 { | 746 { |
747 int x_offset; | 747 octave_idx_type x_offset; |
748 if (x_stride == 1) | 748 if (x_stride == 1) |
749 x_offset = i * x_len; | 749 x_offset = i * x_len; |
750 else | 750 else |
751 { | 751 { |
752 int x_offset2 = 0; | 752 octave_idx_type x_offset2 = 0; |
753 x_offset = i; | 753 x_offset = i; |
754 while (x_offset >= x_stride) | 754 while (x_offset >= x_stride) |
755 { | 755 { |
756 x_offset -= x_stride; | 756 x_offset -= x_stride; |
757 x_offset2++; | 757 x_offset2++; |
758 } | 758 } |
759 x_offset += x_offset2 * x_stride * x_len; | 759 x_offset += x_offset2 * x_stride * x_len; |
760 } | 760 } |
761 | 761 |
762 int idx_j; | 762 octave_idx_type idx_j; |
763 | 763 |
764 double tmp_min = octave_NaN; | 764 double tmp_min = octave_NaN; |
765 | 765 |
766 for (idx_j = 0; idx_j < x_len; idx_j++) | 766 for (idx_j = 0; idx_j < x_len; idx_j++) |
767 { | 767 { |
769 | 769 |
770 if (! octave_is_NaN_or_NA (tmp_min)) | 770 if (! octave_is_NaN_or_NA (tmp_min)) |
771 break; | 771 break; |
772 } | 772 } |
773 | 773 |
774 for (int j = idx_j+1; j < x_len; j++) | 774 for (octave_idx_type j = idx_j+1; j < x_len; j++) |
775 { | 775 { |
776 double tmp = elem (j * x_stride + x_offset); | 776 double tmp = elem (j * x_stride + x_offset); |
777 | 777 |
778 if (octave_is_NaN_or_NA (tmp)) | 778 if (octave_is_NaN_or_NA (tmp)) |
779 continue; | 779 continue; |
790 | 790 |
791 return result; | 791 return result; |
792 } | 792 } |
793 | 793 |
794 NDArray | 794 NDArray |
795 NDArray::concat (const NDArray& rb, const Array<int>& ra_idx) | 795 NDArray::concat (const NDArray& rb, const Array<octave_idx_type>& ra_idx) |
796 { | 796 { |
797 if (rb.numel () > 0) | 797 if (rb.numel () > 0) |
798 insert (rb, ra_idx); | 798 insert (rb, ra_idx); |
799 return *this; | 799 return *this; |
800 } | 800 } |
801 | 801 |
802 ComplexNDArray | 802 ComplexNDArray |
803 NDArray::concat (const ComplexNDArray& rb, const Array<int>& ra_idx) | 803 NDArray::concat (const ComplexNDArray& rb, const Array<octave_idx_type>& ra_idx) |
804 { | 804 { |
805 ComplexNDArray retval (*this); | 805 ComplexNDArray retval (*this); |
806 if (rb.numel () > 0) | 806 if (rb.numel () > 0) |
807 retval.insert (rb, ra_idx); | 807 retval.insert (rb, ra_idx); |
808 return retval; | 808 return retval; |
809 } | 809 } |
810 | 810 |
811 charNDArray | 811 charNDArray |
812 NDArray::concat (const charNDArray& rb, const Array<int>& ra_idx) | 812 NDArray::concat (const charNDArray& rb, const Array<octave_idx_type>& ra_idx) |
813 { | 813 { |
814 charNDArray retval (dims ()); | 814 charNDArray retval (dims ()); |
815 int nel = numel (); | 815 octave_idx_type nel = numel (); |
816 | 816 |
817 for (int i = 0; i < nel; i++) | 817 for (octave_idx_type i = 0; i < nel; i++) |
818 { | 818 { |
819 double d = elem (i); | 819 double d = elem (i); |
820 | 820 |
821 if (xisnan (d)) | 821 if (xisnan (d)) |
822 { | 822 { |
824 ("invalid conversion from NaN to character"); | 824 ("invalid conversion from NaN to character"); |
825 return retval; | 825 return retval; |
826 } | 826 } |
827 else | 827 else |
828 { | 828 { |
829 int ival = NINT (d); | 829 octave_idx_type ival = NINTbig (d); |
830 | 830 |
831 if (ival < 0 || ival > UCHAR_MAX) | 831 if (ival < 0 || ival > UCHAR_MAX) |
832 // XXX FIXME XXX -- is there something | 832 // XXX FIXME XXX -- is there something |
833 // better we could do? Should we warn the user? | 833 // better we could do? Should we warn the user? |
834 ival = 0; | 834 ival = 0; |
845 } | 845 } |
846 | 846 |
847 NDArray | 847 NDArray |
848 real (const ComplexNDArray& a) | 848 real (const ComplexNDArray& a) |
849 { | 849 { |
850 int a_len = a.length (); | 850 octave_idx_type a_len = a.length (); |
851 NDArray retval; | 851 NDArray retval; |
852 if (a_len > 0) | 852 if (a_len > 0) |
853 retval = NDArray (mx_inline_real_dup (a.data (), a_len), a.dims ()); | 853 retval = NDArray (mx_inline_real_dup (a.data (), a_len), a.dims ()); |
854 return retval; | 854 return retval; |
855 } | 855 } |
856 | 856 |
857 NDArray | 857 NDArray |
858 imag (const ComplexNDArray& a) | 858 imag (const ComplexNDArray& a) |
859 { | 859 { |
860 int a_len = a.length (); | 860 octave_idx_type a_len = a.length (); |
861 NDArray retval; | 861 NDArray retval; |
862 if (a_len > 0) | 862 if (a_len > 0) |
863 retval = NDArray (mx_inline_imag_dup (a.data (), a_len), a.dims ()); | 863 retval = NDArray (mx_inline_imag_dup (a.data (), a_len), a.dims ()); |
864 return retval; | 864 return retval; |
865 } | 865 } |
866 | 866 |
867 NDArray& | 867 NDArray& |
868 NDArray::insert (const NDArray& a, int r, int c) | 868 NDArray::insert (const NDArray& a, octave_idx_type r, octave_idx_type c) |
869 { | 869 { |
870 Array<double>::insert (a, r, c); | 870 Array<double>::insert (a, r, c); |
871 return *this; | 871 return *this; |
872 } | 872 } |
873 | 873 |
874 NDArray& | 874 NDArray& |
875 NDArray::insert (const NDArray& a, const Array<int>& ra_idx) | 875 NDArray::insert (const NDArray& a, const Array<octave_idx_type>& ra_idx) |
876 { | 876 { |
877 Array<double>::insert (a, ra_idx); | 877 Array<double>::insert (a, ra_idx); |
878 return *this; | 878 return *this; |
879 } | 879 } |
880 | 880 |
881 NDArray | 881 NDArray |
882 NDArray::abs (void) const | 882 NDArray::abs (void) const |
883 { | 883 { |
884 NDArray retval (dims ()); | 884 NDArray retval (dims ()); |
885 | 885 |
886 int nel = nelem (); | 886 octave_idx_type nel = nelem (); |
887 | 887 |
888 for (int i = 0; i < nel; i++) | 888 for (octave_idx_type i = 0; i < nel; i++) |
889 retval(i) = fabs (elem (i)); | 889 retval(i) = fabs (elem (i)); |
890 | 890 |
891 return retval; | 891 return retval; |
892 } | 892 } |
893 | 893 |
916 | 916 |
917 return retval; | 917 return retval; |
918 } | 918 } |
919 | 919 |
920 void | 920 void |
921 NDArray::increment_index (Array<int>& ra_idx, | 921 NDArray::increment_index (Array<octave_idx_type>& ra_idx, |
922 const dim_vector& dimensions, | 922 const dim_vector& dimensions, |
923 int start_dimension) | 923 int start_dimension) |
924 { | 924 { |
925 ::increment_index (ra_idx, dimensions, start_dimension); | 925 ::increment_index (ra_idx, dimensions, start_dimension); |
926 } | 926 } |
927 | 927 |
928 int | 928 octave_idx_type |
929 NDArray::compute_index (Array<int>& ra_idx, | 929 NDArray::compute_index (Array<octave_idx_type>& ra_idx, |
930 const dim_vector& dimensions) | 930 const dim_vector& dimensions) |
931 { | 931 { |
932 return ::compute_index (ra_idx, dimensions); | 932 return ::compute_index (ra_idx, dimensions); |
933 } | 933 } |
934 | 934 |
935 // This contains no information on the array structure !!! | 935 // This contains no information on the array structure !!! |
936 std::ostream& | 936 std::ostream& |
937 operator << (std::ostream& os, const NDArray& a) | 937 operator << (std::ostream& os, const NDArray& a) |
938 { | 938 { |
939 int nel = a.nelem (); | 939 octave_idx_type nel = a.nelem (); |
940 | 940 |
941 for (int i = 0; i < nel; i++) | 941 for (octave_idx_type i = 0; i < nel; i++) |
942 { | 942 { |
943 os << " "; | 943 os << " "; |
944 octave_write_double (os, a.elem (i)); | 944 octave_write_double (os, a.elem (i)); |
945 os << "\n"; | 945 os << "\n"; |
946 } | 946 } |
948 } | 948 } |
949 | 949 |
950 std::istream& | 950 std::istream& |
951 operator >> (std::istream& is, NDArray& a) | 951 operator >> (std::istream& is, NDArray& a) |
952 { | 952 { |
953 int nel = a.nelem (); | 953 octave_idx_type nel = a.nelem (); |
954 | 954 |
955 if (nel < 1 ) | 955 if (nel < 1 ) |
956 is.clear (std::ios::badbit); | 956 is.clear (std::ios::badbit); |
957 else | 957 else |
958 { | 958 { |
959 double tmp; | 959 double tmp; |
960 for (int i = 0; i < nel; i++) | 960 for (octave_idx_type i = 0; i < nel; i++) |
961 { | 961 { |
962 tmp = octave_read_double (is); | 962 tmp = octave_read_double (is); |
963 if (is) | 963 if (is) |
964 a.elem (i) = tmp; | 964 a.elem (i) = tmp; |
965 else | 965 else |
981 | 981 |
982 NDArray | 982 NDArray |
983 min (double d, const NDArray& m) | 983 min (double d, const NDArray& m) |
984 { | 984 { |
985 dim_vector dv = m.dims (); | 985 dim_vector dv = m.dims (); |
986 int nel = dv.numel (); | 986 octave_idx_type nel = dv.numel (); |
987 | 987 |
988 EMPTY_RETURN_CHECK (NDArray); | 988 EMPTY_RETURN_CHECK (NDArray); |
989 | 989 |
990 NDArray result (dv); | 990 NDArray result (dv); |
991 | 991 |
992 for (int i = 0; i < nel; i++) | 992 for (octave_idx_type i = 0; i < nel; i++) |
993 { | 993 { |
994 OCTAVE_QUIT; | 994 OCTAVE_QUIT; |
995 result (i) = xmin (d, m (i)); | 995 result (i) = xmin (d, m (i)); |
996 } | 996 } |
997 | 997 |
1000 | 1000 |
1001 NDArray | 1001 NDArray |
1002 min (const NDArray& m, double d) | 1002 min (const NDArray& m, double d) |
1003 { | 1003 { |
1004 dim_vector dv = m.dims (); | 1004 dim_vector dv = m.dims (); |
1005 int nel = dv.numel (); | 1005 octave_idx_type nel = dv.numel (); |
1006 | 1006 |
1007 EMPTY_RETURN_CHECK (NDArray); | 1007 EMPTY_RETURN_CHECK (NDArray); |
1008 | 1008 |
1009 NDArray result (dv); | 1009 NDArray result (dv); |
1010 | 1010 |
1011 for (int i = 0; i < nel; i++) | 1011 for (octave_idx_type i = 0; i < nel; i++) |
1012 { | 1012 { |
1013 OCTAVE_QUIT; | 1013 OCTAVE_QUIT; |
1014 result (i) = xmin (d, m (i)); | 1014 result (i) = xmin (d, m (i)); |
1015 } | 1015 } |
1016 | 1016 |
1019 | 1019 |
1020 NDArray | 1020 NDArray |
1021 min (const NDArray& a, const NDArray& b) | 1021 min (const NDArray& a, const NDArray& b) |
1022 { | 1022 { |
1023 dim_vector dv = a.dims (); | 1023 dim_vector dv = a.dims (); |
1024 int nel = dv.numel (); | 1024 octave_idx_type nel = dv.numel (); |
1025 | 1025 |
1026 if (dv != b.dims ()) | 1026 if (dv != b.dims ()) |
1027 { | 1027 { |
1028 (*current_liboctave_error_handler) | 1028 (*current_liboctave_error_handler) |
1029 ("two-arg min expecting args of same size"); | 1029 ("two-arg min expecting args of same size"); |
1032 | 1032 |
1033 EMPTY_RETURN_CHECK (NDArray); | 1033 EMPTY_RETURN_CHECK (NDArray); |
1034 | 1034 |
1035 NDArray result (dv); | 1035 NDArray result (dv); |
1036 | 1036 |
1037 for (int i = 0; i < nel; i++) | 1037 for (octave_idx_type i = 0; i < nel; i++) |
1038 { | 1038 { |
1039 OCTAVE_QUIT; | 1039 OCTAVE_QUIT; |
1040 result (i) = xmin (a (i), b (i)); | 1040 result (i) = xmin (a (i), b (i)); |
1041 } | 1041 } |
1042 | 1042 |
1045 | 1045 |
1046 NDArray | 1046 NDArray |
1047 max (double d, const NDArray& m) | 1047 max (double d, const NDArray& m) |
1048 { | 1048 { |
1049 dim_vector dv = m.dims (); | 1049 dim_vector dv = m.dims (); |
1050 int nel = dv.numel (); | 1050 octave_idx_type nel = dv.numel (); |
1051 | 1051 |
1052 EMPTY_RETURN_CHECK (NDArray); | 1052 EMPTY_RETURN_CHECK (NDArray); |
1053 | 1053 |
1054 NDArray result (dv); | 1054 NDArray result (dv); |
1055 | 1055 |
1056 for (int i = 0; i < nel; i++) | 1056 for (octave_idx_type i = 0; i < nel; i++) |
1057 { | 1057 { |
1058 OCTAVE_QUIT; | 1058 OCTAVE_QUIT; |
1059 result (i) = xmax (d, m (i)); | 1059 result (i) = xmax (d, m (i)); |
1060 } | 1060 } |
1061 | 1061 |
1064 | 1064 |
1065 NDArray | 1065 NDArray |
1066 max (const NDArray& m, double d) | 1066 max (const NDArray& m, double d) |
1067 { | 1067 { |
1068 dim_vector dv = m.dims (); | 1068 dim_vector dv = m.dims (); |
1069 int nel = dv.numel (); | 1069 octave_idx_type nel = dv.numel (); |
1070 | 1070 |
1071 EMPTY_RETURN_CHECK (NDArray); | 1071 EMPTY_RETURN_CHECK (NDArray); |
1072 | 1072 |
1073 NDArray result (dv); | 1073 NDArray result (dv); |
1074 | 1074 |
1075 for (int i = 0; i < nel; i++) | 1075 for (octave_idx_type i = 0; i < nel; i++) |
1076 { | 1076 { |
1077 OCTAVE_QUIT; | 1077 OCTAVE_QUIT; |
1078 result (i) = xmax (d, m (i)); | 1078 result (i) = xmax (d, m (i)); |
1079 } | 1079 } |
1080 | 1080 |
1083 | 1083 |
1084 NDArray | 1084 NDArray |
1085 max (const NDArray& a, const NDArray& b) | 1085 max (const NDArray& a, const NDArray& b) |
1086 { | 1086 { |
1087 dim_vector dv = a.dims (); | 1087 dim_vector dv = a.dims (); |
1088 int nel = dv.numel (); | 1088 octave_idx_type nel = dv.numel (); |
1089 | 1089 |
1090 if (dv != b.dims ()) | 1090 if (dv != b.dims ()) |
1091 { | 1091 { |
1092 (*current_liboctave_error_handler) | 1092 (*current_liboctave_error_handler) |
1093 ("two-arg max expecting args of same size"); | 1093 ("two-arg max expecting args of same size"); |
1096 | 1096 |
1097 EMPTY_RETURN_CHECK (NDArray); | 1097 EMPTY_RETURN_CHECK (NDArray); |
1098 | 1098 |
1099 NDArray result (dv); | 1099 NDArray result (dv); |
1100 | 1100 |
1101 for (int i = 0; i < nel; i++) | 1101 for (octave_idx_type i = 0; i < nel; i++) |
1102 { | 1102 { |
1103 OCTAVE_QUIT; | 1103 OCTAVE_QUIT; |
1104 result (i) = xmax (a (i), b (i)); | 1104 result (i) = xmax (a (i), b (i)); |
1105 } | 1105 } |
1106 | 1106 |