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
dNDArray.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (C) 1996-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_dNDArray_h)
27 #define octave_dNDArray_h 1
28 
29 #include "octave-config.h"
30 
31 #include "intNDArray-fwd.h"
32 #include "MArray.h"
33 #include "bsxfun-decl.h"
34 #include "mx-defs.h"
35 #include "mx-op-decl.h"
36 
37 class
39 NDArray : public MArray<double>
40 {
41 public:
42 
43  NDArray () : MArray<double> () { }
44 
45  NDArray (const dim_vector& dv) : MArray<double> (dv) { }
46 
47  NDArray (const dim_vector& dv, double val)
48  : MArray<double> (dv, val) { }
49 
50  NDArray (const NDArray& a) : MArray<double> (a) { }
51 
52  NDArray (const Array<octave_idx_type>& a, bool zero_based = false,
53  bool negative_to_nan = false);
54 
55  template <typename U>
56  NDArray (const MArray<U>& a) : MArray<double> (a) { }
57 
58  template <typename U>
59  NDArray (const Array<U>& a) : MArray<double> (a) { }
60 
61  template <typename U>
62  explicit NDArray (const intNDArray<U>& a) : MArray<double> (a) { }
63 
64  NDArray (const charNDArray&);
65 
66  NDArray& operator = (const NDArray& a)
67  {
69  return *this;
70  }
71 
72  ~NDArray () = default;
73 
74  // unary operations
75 
77 
78  OCTAVE_API bool any_element_is_negative (bool = false) const;
79  OCTAVE_API bool any_element_is_positive (bool = false) const;
80  OCTAVE_API bool any_element_is_nan () const;
81  OCTAVE_API bool any_element_is_inf_or_nan () const;
82  OCTAVE_API bool any_element_not_one_or_zero () const;
83  OCTAVE_API bool all_elements_are_zero () const;
84  OCTAVE_API bool all_elements_are_int_or_inf_or_nan () const;
85  OCTAVE_API bool all_integers (double& max_val, double& min_val) const;
86  OCTAVE_API bool all_integers () const;
87  OCTAVE_API bool too_large_for_float () const;
88 
89  // FIXME: this is not quite the right thing.
90 
91  OCTAVE_API boolNDArray all (int dim = -1) const;
92  OCTAVE_API boolNDArray any (int dim = -1) const;
93 
94  OCTAVE_API NDArray cumprod (int dim = -1) const;
95  OCTAVE_API NDArray cumsum (int dim = -1) const;
96  OCTAVE_API NDArray prod (int dim = -1) const;
97  OCTAVE_API NDArray sum (int dim = -1) const;
98  OCTAVE_API NDArray xsum (int dim = -1) const;
99  OCTAVE_API NDArray sumsq (int dim = -1) const;
101  concat (const NDArray& rb, const Array<octave_idx_type>& ra_idx);
105  concat (const charNDArray& rb, const Array<octave_idx_type>& ra_idx);
106 
107  OCTAVE_API NDArray max (int dim = -1) const;
108  OCTAVE_API NDArray max (Array<octave_idx_type>& index, int dim = -1) const;
109  OCTAVE_API NDArray min (int dim = -1) const;
110  OCTAVE_API NDArray min (Array<octave_idx_type>& index, int dim = -1) const;
111 
112  OCTAVE_API NDArray cummax (int dim = -1) const;
114  cummax (Array<octave_idx_type>& index, int dim = -1) const;
115  OCTAVE_API NDArray cummin (int dim = -1) const;
117  cummin (Array<octave_idx_type>& index, int dim = -1) const;
118 
119  OCTAVE_API NDArray diff (octave_idx_type order = 1, int dim = -1) const;
120 
122  insert (const NDArray& a, octave_idx_type r, octave_idx_type c);
124  insert (const NDArray& a, const Array<octave_idx_type>& ra_idx);
125 
126  OCTAVE_API NDArray abs () const;
127  OCTAVE_API boolNDArray isnan () const;
128  OCTAVE_API boolNDArray isinf () const;
130 
131  OCTAVE_API ComplexNDArray fourier (int dim = 1) const;
132  OCTAVE_API ComplexNDArray ifourier (int dim = 1) const;
133 
134  OCTAVE_API ComplexNDArray fourier2d () const;
135  OCTAVE_API ComplexNDArray ifourier2d () const;
136 
137  OCTAVE_API ComplexNDArray fourierNd () const;
138  OCTAVE_API ComplexNDArray ifourierNd () const;
139 
140  friend OCTAVE_API NDArray real (const ComplexNDArray& a);
141  friend OCTAVE_API NDArray imag (const ComplexNDArray& a);
142 
143  friend class ComplexNDArray;
144 
145  NDArray squeeze () const { return MArray<double>::squeeze (); }
146 
147  static OCTAVE_API void
149  const dim_vector& dimensions, int start_dimension = 0);
150 
153 
154  // i/o
155 
156  friend OCTAVE_API std::ostream&
157  operator << (std::ostream& os, const NDArray& a);
158  friend OCTAVE_API std::istream& operator >> (std::istream& is, NDArray& a);
159 
160  OCTAVE_API NDArray diag (octave_idx_type k = 0) const;
161 
163 
165  {
167  return *this;
168  }
169 
170 };
171 
172 // Publish externally used friend functions.
173 
174 extern OCTAVE_API NDArray real (const ComplexNDArray& a);
175 extern OCTAVE_API NDArray imag (const ComplexNDArray& a);
176 
178 
181 
184 
187 
189 
192 
198 
199 #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
#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_OP2_DECL(OP, ARRAY, ARRAY1, ARRAY2, API)
Definition: bsxfun-decl.h:32
#define BSXFUN_OP_DECL(OP, ARRAY, API)
Definition: bsxfun-decl.h:29
ComplexNDArray diag(octave_idx_type k=0) const
Definition: CNDArray.cc:585
MArray< T > & operator=(const MArray< T > &a)
Definition: MArray.h:81
MArray squeeze() const
Definition: MArray.h:97
void changesign()
Definition: MArray.cc:217
NDArray(const intNDArray< U > &a)
Definition: dNDArray.h:62
NDArray(const NDArray &a)
Definition: dNDArray.h:50
~NDArray()=default
NDArray(const dim_vector &dv, double val)
Definition: dNDArray.h:47
NDArray(const Array< U > &a)
Definition: dNDArray.h:59
NDArray(const MArray< U > &a)
Definition: dNDArray.h:56
NDArray squeeze() const
Definition: dNDArray.h:145
NDArray & changesign()
Definition: dNDArray.h:164
NDArray()
Definition: dNDArray.h:43
NDArray(const dim_vector &dv)
Definition: dNDArray.h:45
Vector representing the dimensions (size) of an Array.
Definition: dim-vector.h:94
NDArray min(double d, const NDArray &m)
Definition: dNDArray.cc:656
NDArray real(const ComplexNDArray &a)
Definition: dNDArray.cc:544
NDArray imag(const ComplexNDArray &a)
Definition: dNDArray.cc:550
NDArray max(double d, const NDArray &m)
Definition: dNDArray.cc:656
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
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)