GNU Octave  4.4.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
ov-re-mat.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2018 John W. Eaton
4 Copyright (C) 2009-2010 VZLU Prague
5 
6 This file is part of Octave.
7 
8 Octave is free software: you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12 
13 Octave is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with Octave; see the file COPYING. If not, see
20 <https://www.gnu.org/licenses/>.
21 
22 */
23 
24 #if ! defined (octave_ov_re_mat_h)
25 #define octave_ov_re_mat_h 1
26 
27 #include "octave-config.h"
28 
29 #include <cstdlib>
30 
31 #include <iosfwd>
32 #include <string>
33 
34 #include "mx-base.h"
35 #include "str-vec.h"
36 
37 #include "error.h"
38 #include "oct-stream.h"
39 #include "ov-base.h"
40 #include "ov-base-mat.h"
41 #include "ov-typeinfo.h"
42 
43 #include "MatrixType.h"
44 
45 class octave_value_list;
46 
47 // Real matrix values.
48 
49 class
50 OCTINTERP_API
52 {
53 public:
54 
56  : octave_base_matrix<NDArray> () { }
57 
58  octave_matrix (const Matrix& m)
59  : octave_base_matrix<NDArray> (m) { }
60 
61  octave_matrix (const Matrix& m, const MatrixType& t)
62  : octave_base_matrix<NDArray> (m, t) { }
63 
64  octave_matrix (const NDArray& nda)
65  : octave_base_matrix<NDArray> (nda) { }
66 
69 
72 
74  : octave_base_matrix<NDArray> (Matrix (v)) { }
75 
77  : octave_base_matrix<NDArray> (Matrix (v)) { }
78 
80  : octave_base_matrix<NDArray> (m) { }
81 
83  bool zero_based = false, bool cache_index = false)
84  : octave_base_matrix<NDArray> (NDArray (idx, zero_based))
85  {
86  // Auto-create cache to speed up subsequent indexing.
87  if (zero_based && cache_index)
88  set_idx_cache (idx_vector (idx));
89  }
90 
91  octave_matrix (const NDArray& nda, const idx_vector& cache)
93  {
94  set_idx_cache (cache);
95  }
96 
97  ~octave_matrix (void) = default;
98 
99  octave_base_value * clone (void) const { return new octave_matrix (*this); }
100  octave_base_value * empty_clone (void) const { return new octave_matrix (); }
101 
102  type_conv_info numeric_demotion_function (void) const;
103 
104  octave_base_value * try_narrowing_conversion (void);
105 
106  idx_vector index_vector (bool /* require_integers */ = false) const
107  { return idx_cache ? *idx_cache : set_idx_cache (idx_vector (matrix)); }
108 
109  builtin_type_t builtin_type (void) const { return btyp_double; }
110 
111  bool is_real_matrix (void) const { return true; }
112 
113  bool isreal (void) const { return true; }
114 
115  bool is_double_type (void) const { return true; }
116 
117  bool isfloat (void) const { return true; }
118 
120  int8_array_value (void) const { return int8NDArray (matrix); }
121 
123  int16_array_value (void) const { return int16NDArray (matrix); }
124 
126  int32_array_value (void) const { return int32NDArray (matrix); }
127 
129  int64_array_value (void) const { return int64NDArray (matrix); }
130 
132  uint8_array_value (void) const { return uint8NDArray (matrix); }
133 
135  uint16_array_value (void) const { return uint16NDArray (matrix); }
136 
138  uint32_array_value (void) const { return uint32NDArray (matrix); }
139 
141  uint64_array_value (void) const { return uint64NDArray (matrix); }
142 
143  double double_value (bool = false) const;
144 
145  float float_value (bool = false) const;
146 
147  double scalar_value (bool frc_str_conv = false) const
148  { return double_value (frc_str_conv); }
149 
150  Matrix matrix_value (bool = false) const;
151 
152  FloatMatrix float_matrix_value (bool = false) const;
153 
154  Complex complex_value (bool = false) const;
155 
156  FloatComplex float_complex_value (bool = false) const;
157 
158  ComplexMatrix complex_matrix_value (bool = false) const;
159 
160  FloatComplexMatrix float_complex_matrix_value (bool = false) const;
161 
162  ComplexNDArray complex_array_value (bool = false) const;
163 
164  FloatComplexNDArray float_complex_array_value (bool = false) const;
165 
166  boolNDArray bool_array_value (bool warn = false) const;
167 
168  charNDArray char_array_value (bool = false) const;
169 
170  NDArray array_value (bool = false) const { return matrix; }
171 
172  FloatNDArray float_array_value (bool = false) const { return matrix; }
173 
174  SparseMatrix sparse_matrix_value (bool = false) const;
175 
176  SparseComplexMatrix sparse_complex_matrix_value (bool = false) const;
177 
178  octave_value as_double (void) const;
179  octave_value as_single (void) const;
180 
181  octave_value as_int8 (void) const;
182  octave_value as_int16 (void) const;
183  octave_value as_int32 (void) const;
184  octave_value as_int64 (void) const;
185 
186  octave_value as_uint8 (void) const;
187  octave_value as_uint16 (void) const;
188  octave_value as_uint32 (void) const;
189  octave_value as_uint64 (void) const;
190 
191  octave_value diag (octave_idx_type k = 0) const;
192 
193  octave_value diag (octave_idx_type m, octave_idx_type n) const;
194 
195  octave_value reshape (const dim_vector& new_dims) const;
196 
197  octave_value squeeze (void) const;
198 
199  octave_value sort (octave_idx_type dim = 0, sortmode mode = ASCENDING) const;
201  sortmode mode = ASCENDING) const;
202 
203  sortmode issorted (sortmode mode = UNSORTED) const;
204 
205  Array<octave_idx_type> sort_rows_idx (sortmode mode = ASCENDING) const;
206 
207  sortmode is_sorted_rows (sortmode mode = UNSORTED) const;
208 
209  // Use matrix_ref here to clear index cache.
210  void increment (void) { matrix_ref () += 1.0; }
211 
212  void decrement (void) { matrix_ref () -= 1.0; }
213 
214  void changesign (void) { matrix_ref ().changesign (); }
215 
216  octave_value convert_to_str_internal (bool pad, bool force, char type) const;
217 
218  void print_raw (std::ostream& os, bool pr_as_read_syntax = false) const;
219 
220  bool save_ascii (std::ostream& os);
221 
222  bool load_ascii (std::istream& is);
223 
224  bool save_binary (std::ostream& os, bool& save_as_floats);
225 
226  bool load_binary (std::istream& is, bool swap,
228 
229  bool save_hdf5 (octave_hdf5_id loc_id, const char *name, bool save_as_floats);
230 
231  bool load_hdf5 (octave_hdf5_id loc_id, const char *name);
232 
233  int write (octave::stream& os, int block_size,
234  oct_data_conv::data_type output_type, int skip,
236  { return os.write (matrix, block_size, output_type, skip, flt_fmt); }
237 
238  // Unsafe. This function exists to support the MEX interface.
239  // You should not use it anywhere else.
240  void * mex_get_data (void) const { return matrix.mex_get_data (); }
241 
242  mxArray * as_mxArray (void) const;
243 
244  octave_value map (unary_mapper_t umap) const;
245 
246 private:
247 
249 };
250 
251 #endif
octave_idx_type write(const octave_value &data, octave_idx_type block_size, oct_data_conv::data_type output_type, octave_idx_type skip, mach_info::float_format flt_fmt)
Definition: oct-stream.cc:6704
builtin_type_t builtin_type(void) const
Definition: ov-re-mat.h:109
octave_matrix(const Matrix &m, const MatrixType &t)
Definition: ov-re-mat.h:61
octave_base_value * empty_clone(void) const
Definition: ov-re-mat.h:100
octave_matrix(const Array< octave_idx_type > &idx, bool zero_based=false, bool cache_index=false)
Definition: ov-re-mat.h:82
intNDArray< octave_int64 > int64NDArray
Definition: int64NDArray.h:33
characters Given a string matrix
Definition: hex2num.cc:155
double scalar_value(bool frc_str_conv=false) const
Definition: ov-re-mat.h:147
sortmode
Definition: oct-sort.h:105
uint8NDArray uint8_array_value(void) const
Definition: ov-re-mat.h:132
intNDArray< octave_uint32 > uint32NDArray
Definition: uint32NDArray.h:33
int32NDArray int32_array_value(void) const
Definition: ov-re-mat.h:126
Return the CPU time used by your Octave session The first output is the total time spent executing your process and is equal to the sum of second and third which are the number of CPU seconds spent executing in user mode and the number of CPU seconds spent executing in system mode
Definition: data.cc:6348
intNDArray< octave_uint8 > uint8NDArray
Definition: uint8NDArray.h:33
intNDArray< octave_uint16 > uint16NDArray
Definition: uint16NDArray.h:33
for large enough k
Definition: lu.cc:617
int8NDArray int8_array_value(void) const
Definition: ov-re-mat.h:120
int64NDArray int64_array_value(void) const
Definition: ov-re-mat.h:129
octave_matrix(const DiagMatrix &d)
Definition: ov-re-mat.h:70
octave::mach_info::float_format flt_fmt
Definition: load-save.cc:736
octave_matrix(const Matrix &m)
Definition: ov-re-mat.h:58
octave_matrix(void)
Definition: ov-re-mat.h:55
NDArray array_value(bool=false) const
Definition: ov-re-mat.h:170
OCTAVE_EXPORT octave_value_list return the number of command line arguments passed to Octave If called with the optional argument the function t
Definition: ov-usr-fcn.cc:997
intNDArray< octave_int16 > int16NDArray
Definition: int16NDArray.h:33
builtin_type_t
Definition: ov-base.h:71
octave_matrix(const RowVector &v)
Definition: ov-re-mat.h:73
F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE * d
static double as_double(time_t sec, long usec)
Definition: oct-time.h:34
bool swap
Definition: load-save.cc:738
#define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
Definition: ov-base.h:158
bool isfloat(void) const
Definition: ov-re-mat.h:117
nd deftypefn *std::string name
Definition: sysdep.cc:647
octave_base_value * clone(void) const
Definition: ov-re-mat.h:99
intNDArray< octave_int8 > int8NDArray
Definition: int8NDArray.h:33
bool save_as_floats
Definition: load-save.cc:1617
octave_matrix(const ColumnVector &v)
Definition: ov-re-mat.h:76
void decrement(void)
Definition: ov-re-mat.h:212
int64_t octave_hdf5_id
octave_matrix(const Array< double > &m)
Definition: ov-re-mat.h:67
idx_vector index_vector(bool=false) const
Definition: ov-re-mat.h:106
idx type
Definition: ov.cc:3114
Definition: dMatrix.h:36
void * mex_get_data(void) const
Definition: ov-re-mat.h:240
uint64NDArray uint64_array_value(void) const
Definition: ov-re-mat.h:141
octave_matrix(const octave_matrix &m)
Definition: ov-re-mat.h:79
bool is_real_matrix(void) const
Definition: ov-re-mat.h:111
uint16NDArray uint16_array_value(void) const
Definition: ov-re-mat.h:135
intNDArray< octave_int32 > int32NDArray
Definition: int32NDArray.h:33
void increment(void)
Definition: ov-re-mat.h:210
uint32NDArray uint32_array_value(void) const
Definition: ov-re-mat.h:138
void changesign(void)
Definition: ov-re-mat.h:214
octave_map map(dims)
octave_matrix(const NDArray &nda)
Definition: ov-re-mat.h:64
octave_matrix(const NDArray &nda, const idx_vector &cache)
Definition: ov-re-mat.h:91
bool isreal(void) const
Definition: ov-re-mat.h:113
FloatNDArray float_array_value(bool=false) const
Definition: ov-re-mat.h:172
std::complex< float > FloatComplex
Definition: oct-cmplx.h:32
std::complex< double > Complex
Definition: oct-cmplx.h:31
write the output to stdout if nargout is
Definition: load-save.cc:1612
Vector representing the dimensions (size) of an Array.
Definition: dim-vector.h:87
bool is_double_type(void) const
Definition: ov-re-mat.h:115
octave::stream os
Definition: file-io.cc:627
int16NDArray int16_array_value(void) const
Definition: ov-re-mat.h:123
int write(octave::stream &os, int block_size, oct_data_conv::data_type output_type, int skip, octave::mach_info::float_format flt_fmt) const
Definition: ov-re-mat.h:233
intNDArray< octave_uint64 > uint64NDArray
Definition: uint64NDArray.h:33