GNU Octave  9.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CNDArray.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (C) 2003-2024 The Octave Project Developers
4 //
5 // See the file COPYRIGHT.md in the top-level directory of this
6 // distribution or <https://octave.org/copyright/>.
7 //
8 // This file is part of Octave.
9 //
10 // Octave is free software: you can redistribute it and/or modify it
11 // under the terms of the GNU General Public License as published by
12 // the Free Software Foundation, either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // Octave is distributed in the hope that it will be useful, but
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU General Public License for more details.
19 //
20 // You should have received a copy of the GNU General Public License
21 // along with Octave; see the file COPYING. If not, see
22 // <https://www.gnu.org/licenses/>.
23 //
24 ////////////////////////////////////////////////////////////////////////
25 
26 #if ! defined (octave_CNDArray_h)
27 #define octave_CNDArray_h 1
28 
29 #include "octave-config.h"
30 
31 #include "MArray.h"
32 #include "bsxfun-decl.h"
33 #include "mx-defs.h"
34 #include "mx-op-decl.h"
35 
36 class
39 {
40 public:
41 
43 
44  ComplexNDArray (const dim_vector& dv) : MArray<Complex> (dv) { }
45 
46  ComplexNDArray (const dim_vector& dv, const Complex& val)
47  : MArray<Complex> (dv, val) { }
48 
50 
51  template <typename U>
52  ComplexNDArray (const MArray<U>& a) : MArray<Complex> (a) { }
53 
54  template <typename U>
55  ComplexNDArray (const Array<U>& a) : MArray<Complex> (a) { }
56 
57  ComplexNDArray (const charNDArray&);
58 
59  ComplexNDArray& operator = (const ComplexNDArray& a)
60  {
62  return *this;
63  }
64 
65  ~ComplexNDArray () = default;
66 
67  // unary operations
68 
70 
71  // FIXME: this is not quite the right thing.
72 
73  OCTAVE_API bool any_element_is_nan () const;
74  OCTAVE_API bool any_element_is_inf_or_nan () const;
75  OCTAVE_API bool all_elements_are_real () const;
76  OCTAVE_API bool all_integers (double& max_val, double& min_val) const;
77  OCTAVE_API bool too_large_for_float () const;
78 
79  OCTAVE_API boolNDArray all (int dim = -1) const;
80  OCTAVE_API boolNDArray any (int dim = -1) const;
81 
82  OCTAVE_API ComplexNDArray cumprod (int dim = -1) const;
83  OCTAVE_API ComplexNDArray cumsum (int dim = -1) const;
84  OCTAVE_API ComplexNDArray prod (int dim = -1) const;
85  OCTAVE_API ComplexNDArray sum (int dim = -1) const;
86  OCTAVE_API ComplexNDArray xsum (int dim = -1) const;
87  OCTAVE_API ComplexNDArray sumsq (int dim = -1) const;
91  concat (const NDArray& rb, const Array<octave_idx_type>& ra_idx);
92 
93  OCTAVE_API ComplexNDArray max (int dim = -1) const;
95  max (Array<octave_idx_type>& index, int dim = -1) const;
96  OCTAVE_API ComplexNDArray min (int dim = -1) const;
98  min (Array<octave_idx_type>& index, int dim = -1) const;
99 
100  OCTAVE_API ComplexNDArray cummax (int dim = -1) const;
102  cummax (Array<octave_idx_type>& index, int dim = -1) const;
103  OCTAVE_API ComplexNDArray cummin (int dim = -1) const;
105  cummin (Array<octave_idx_type>& index, int dim = -1) const;
106 
108  diff (octave_idx_type order = 1, int dim = -1) const;
109 
111  insert (const NDArray& a, octave_idx_type r, octave_idx_type c);
113  insert (const ComplexNDArray& a, octave_idx_type r, octave_idx_type c);
115  insert (const ComplexNDArray& a, const Array<octave_idx_type>& ra_idx);
116 
117  OCTAVE_API NDArray abs () const;
118  OCTAVE_API boolNDArray isnan () const;
119  OCTAVE_API boolNDArray isinf () const;
121 
122  friend OCTAVE_API ComplexNDArray conj (const ComplexNDArray& a);
123 
124  OCTAVE_API ComplexNDArray fourier (int dim = 1) const;
125  OCTAVE_API ComplexNDArray ifourier (int dim = 1) const;
126 
127  OCTAVE_API ComplexNDArray fourier2d () const;
128  OCTAVE_API ComplexNDArray ifourier2d () const;
129 
130  OCTAVE_API ComplexNDArray fourierNd () const;
131  OCTAVE_API ComplexNDArray ifourierNd () const;
132 
134 
135  static OCTAVE_API void
137  const dim_vector& dimensions,
138  int start_dimension = 0);
139 
142  const dim_vector& dimensions);
143 
144  // i/o
145 
146  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
147  const ComplexNDArray& a);
148  friend OCTAVE_API std::istream& operator >> (std::istream& is,
149  ComplexNDArray& a);
150 
151  // bool all_elements_are_real () const;
152  // bool all_integers (double& max_val, double& min_val) const;
153 
154  OCTAVE_API ComplexNDArray diag (octave_idx_type k = 0) const;
155 
157 
159  {
161  return *this;
162  }
163 
164 };
165 
166 extern OCTAVE_API ComplexNDArray conj (const ComplexNDArray& a);
167 
169 
172 
175 
178 
180 
181 extern OCTAVE_API ComplexNDArray& operator *= (ComplexNDArray& a, double s);
182 extern OCTAVE_API ComplexNDArray& operator /= (ComplexNDArray& a, double s);
183 
186 
188 
189 #endif
template std::ostream & operator<<(std::ostream &, const Array< bool > &)
octave_idx_type compute_index(octave_idx_type n, const dim_vector &dims)
Definition: Array-util.cc:177
void increment_index(Array< octave_idx_type > &ra_idx, const dim_vector &dimensions, int start_dimension)
Definition: Array-util.cc:60
ComplexNDArray concat(NDArray &ra, ComplexNDArray &rb, const Array< octave_idx_type > &ra_idx)
Definition: CNDArray.cc:418
ComplexNDArray min(Complex d, const ComplexNDArray &m)
Definition: CNDArray.cc:632
ComplexNDArray conj(const ComplexNDArray &a)
Definition: CNDArray.cc:502
ComplexNDArray max(Complex d, const ComplexNDArray &m)
Definition: CNDArray.cc:632
#define MARRAY_FORWARD_DEFS(B, R, T)
Definition: MArray.h:130
std::istream & operator>>(std::istream &is, SparseBoolMatrix &a)
Definition: boolSparse.cc:279
#define BSXFUN_STDREL_DECLS(ARRAY, API)
Definition: bsxfun-decl.h:53
#define BSXFUN_STDOP_DECLS(ARRAY, API)
Definition: bsxfun-decl.h:38
#define BSXFUN_OP_DECL(OP, ARRAY, API)
Definition: bsxfun-decl.h:29
N Dimensional Array with copy-on-write semantics.
Definition: Array.h:130
ComplexNDArray & changesign()
Definition: CNDArray.h:158
ComplexNDArray(const Array< U > &a)
Definition: CNDArray.h:55
ComplexNDArray squeeze() const
Definition: CNDArray.h:133
ComplexNDArray(const dim_vector &dv, const Complex &val)
Definition: CNDArray.h:46
ComplexNDArray(const ComplexNDArray &a)
Definition: CNDArray.h:49
~ComplexNDArray()=default
ComplexNDArray(const MArray< U > &a)
Definition: CNDArray.h:52
ComplexNDArray(const dim_vector &dv)
Definition: CNDArray.h:44
MArray< T > & operator=(const MArray< T > &a)
Definition: MArray.h:81
MArray squeeze() const
Definition: MArray.h:97
void changesign()
Definition: MArray.cc:217
Vector representing the dimensions (size) of an Array.
Definition: dim-vector.h:94
bool isfinite(double x)
Definition: lo-mappers.h:192
bool isinf(double x)
Definition: lo-mappers.h:203
bool isnan(bool)
Definition: lo-mappers.h:178
bool too_large_for_float(double x)
Definition: lo-utils.cc:56
#define OCTAVE_API
Definition: main.cc:55
T octave_idx_type m
Definition: mx-inlines.cc:781
octave_idx_type n
Definition: mx-inlines.cc:761
T * r
Definition: mx-inlines.cc:781
#define NDND_BOOL_OP_DECLS(ND1, ND2, API)
Definition: mx-op-decl.h:226
#define NDND_CMP_OP_DECLS(ND1, ND2, API)
Definition: mx-op-decl.h:218
#define NDS_BOOL_OP_DECLS(ND, S, API)
Definition: mx-op-decl.h:172
#define SND_CMP_OP_DECLS(S, ND, API)
Definition: mx-op-decl.h:191
#define MINMAX_DECLS(T, S, API)
Definition: mx-op-decl.h:288
#define NDS_CMP_OP_DECLS(ND, S, API)
Definition: mx-op-decl.h:164
#define SND_BOOL_OP_DECLS(S, ND, API)
Definition: mx-op-decl.h:199
std::complex< double > Complex
Definition: oct-cmplx.h:33
octave_int< T > pow(const octave_int< T > &a, const octave_int< T > &b)
const octave_base_value const Array< octave_idx_type > & ra_idx
octave_value operator!(const octave_value &a)
Definition: ov.h:1633
template int8_t abs(int8_t)