GNU Octave  4.2.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ov-re-mat.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2017 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 the
10 Free Software Foundation; either version 3 of the License, or (at your
11 option) any later version.
12 
13 Octave is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 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 <http://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 class tree_walker;
48 
49 // Real matrix values.
50 
51 class
54 {
55 public:
56 
58  : octave_base_matrix<NDArray> () { }
59 
61  : octave_base_matrix<NDArray> (m) { }
62 
63  octave_matrix (const Matrix& m, const MatrixType& t)
64  : octave_base_matrix<NDArray> (m, t) { }
65 
66  octave_matrix (const NDArray& nda)
67  : octave_base_matrix<NDArray> (nda) { }
68 
71 
73  : octave_base_matrix<NDArray> (Matrix (d)) { }
74 
76  : octave_base_matrix<NDArray> (Matrix (v)) { }
77 
79  : octave_base_matrix<NDArray> (Matrix (v)) { }
80 
82  : octave_base_matrix<NDArray> (m) { }
83 
85  bool zero_based = false, bool cache_index = false)
86  : octave_base_matrix<NDArray> (NDArray (idx, zero_based))
87  {
88  // Auto-create cache to speed up subsequent indexing.
89  if (zero_based && cache_index)
90  set_idx_cache (idx_vector (idx));
91  }
92 
93  octave_matrix (const NDArray& nda, const idx_vector& cache)
95  {
96  set_idx_cache (cache);
97  }
98 
99  ~octave_matrix (void) { }
100 
101  octave_base_value *clone (void) const { return new octave_matrix (*this); }
102  octave_base_value *empty_clone (void) const { return new octave_matrix (); }
103 
104  type_conv_info numeric_demotion_function (void) const;
105 
106  octave_base_value *try_narrowing_conversion (void);
107 
108  idx_vector index_vector (bool /* require_integers */ = false) const
109  { return idx_cache ? *idx_cache : set_idx_cache (idx_vector (matrix)); }
110 
111  builtin_type_t builtin_type (void) const { return btyp_double; }
112 
113  bool is_real_matrix (void) const { return true; }
114 
115  bool is_real_type (void) const { return true; }
116 
117  bool is_double_type (void) const { return true; }
118 
119  bool is_float_type (void) const { return true; }
120 
122  int8_array_value (void) const { return int8NDArray (matrix); }
123 
125  int16_array_value (void) const { return int16NDArray (matrix); }
126 
128  int32_array_value (void) const { return int32NDArray (matrix); }
129 
131  int64_array_value (void) const { return int64NDArray (matrix); }
132 
134  uint8_array_value (void) const { return uint8NDArray (matrix); }
135 
137  uint16_array_value (void) const { return uint16NDArray (matrix); }
138 
140  uint32_array_value (void) const { return uint32NDArray (matrix); }
141 
143  uint64_array_value (void) const { return uint64NDArray (matrix); }
144 
145  double double_value (bool = false) const;
146 
147  float float_value (bool = false) const;
148 
149  double scalar_value (bool frc_str_conv = false) const
150  { return double_value (frc_str_conv); }
151 
152  Matrix matrix_value (bool = false) const;
153 
154  FloatMatrix float_matrix_value (bool = false) const;
155 
156  Complex complex_value (bool = false) const;
157 
158  FloatComplex float_complex_value (bool = false) const;
159 
160  ComplexMatrix complex_matrix_value (bool = false) const;
161 
162  FloatComplexMatrix float_complex_matrix_value (bool = false) const;
163 
164  ComplexNDArray complex_array_value (bool = false) const;
165 
166  FloatComplexNDArray float_complex_array_value (bool = false) const;
167 
168  boolNDArray bool_array_value (bool warn = false) const;
169 
170  charNDArray char_array_value (bool = false) const;
171 
172  NDArray array_value (bool = false) const { return matrix; }
173 
174  FloatNDArray float_array_value (bool = false) const { return matrix; }
175 
176  SparseMatrix sparse_matrix_value (bool = false) const;
177 
178  SparseComplexMatrix sparse_complex_matrix_value (bool = false) const;
179 
180  octave_value as_double (void) const;
181  octave_value as_single (void) const;
182 
183  octave_value as_int8 (void) const;
184  octave_value as_int16 (void) const;
185  octave_value as_int32 (void) const;
186  octave_value as_int64 (void) const;
187 
188  octave_value as_uint8 (void) const;
189  octave_value as_uint16 (void) const;
190  octave_value as_uint32 (void) const;
191  octave_value as_uint64 (void) const;
192 
193  octave_value diag (octave_idx_type k = 0) const;
194 
196 
197  octave_value reshape (const dim_vector& new_dims) const;
198 
199  octave_value squeeze (void) const;
200 
201  octave_value sort (octave_idx_type dim = 0, sortmode mode = ASCENDING) const;
203  sortmode mode = ASCENDING) const;
204 
205  sortmode is_sorted (sortmode mode = UNSORTED) const;
206 
207  Array<octave_idx_type> sort_rows_idx (sortmode mode = ASCENDING) const;
208 
209  sortmode is_sorted_rows (sortmode mode = UNSORTED) const;
210 
211  // Use matrix_ref here to clear index cache.
212  void increment (void) { matrix_ref () += 1.0; }
213 
214  void decrement (void) { matrix_ref () -= 1.0; }
215 
216  void changesign (void) { matrix_ref ().changesign (); }
217 
218  octave_value convert_to_str_internal (bool pad, bool force, char type) const;
219 
220  void print_raw (std::ostream& os, bool pr_as_read_syntax = false) const;
221 
222  bool save_ascii (std::ostream& os);
223 
224  bool load_ascii (std::istream& is);
225 
226  bool save_binary (std::ostream& os, bool& save_as_floats);
227 
228  bool load_binary (std::istream& is, bool swap,
230 
231  bool save_hdf5 (octave_hdf5_id loc_id, const char *name, bool save_as_floats);
232 
233  bool load_hdf5 (octave_hdf5_id loc_id, const char *name);
234 
235  int write (octave_stream& os, int block_size,
236  oct_data_conv::data_type output_type, int skip,
238  { return os.write (matrix, block_size, output_type, skip, flt_fmt); }
239 
240  // Unsafe. This function exists to support the MEX interface.
241  // You should not use it anywhere else.
242  void *mex_get_data (void) const { return matrix.mex_get_data (); }
243 
244  mxArray *as_mxArray (void) const;
245 
246  octave_value map (unary_mapper_t umap) const;
247 
248 private:
249 
251 };
252 
253 #endif
octave_matrix(const Matrix &m, const MatrixType &t)
Definition: ov-re-mat.h:63
octave_base_value * empty_clone(void) const
Definition: ov-re-mat.h:102
octave_matrix(const Array< octave_idx_type > &idx, bool zero_based=false, bool cache_index=false)
Definition: ov-re-mat.h:84
intNDArray< octave_int64 > int64NDArray
Definition: int64NDArray.h:33
double scalar_value(bool frc_str_conv=false) const
Definition: ov-re-mat.h:149
NDArray array_value(bool=false) const
Definition: ov-re-mat.h:172
int64NDArray int64_array_value(void) const
Definition: ov-re-mat.h:131
~octave_matrix(void)
Definition: ov-re-mat.h:99
octave_idx_type write(const octave_value &data, octave_idx_type block_size, oct_data_conv::data_type output_type, octave_idx_type skip, octave::mach_info::float_format flt_fmt)
Definition: oct-stream.cc:6647
sortmode
Definition: oct-sort.h:105
FloatNDArray float_array_value(bool=false) const
Definition: ov-re-mat.h:174
intNDArray< octave_uint32 > uint32NDArray
Definition: uint32NDArray.h:33
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:6386
intNDArray< octave_uint8 > uint8NDArray
Definition: uint8NDArray.h:33
intNDArray< octave_uint16 > uint16NDArray
Definition: uint16NDArray.h:33
for large enough k
Definition: lu.cc:606
the sparsity preserving column transformation such that that defines the pivoting threshold can be given in which case it defines the then the first element defines the pivoting tolerance for the unsymmetric the values defined such that for full matrix
Definition: lu.cc:138
uint16NDArray uint16_array_value(void) const
Definition: ov-re-mat.h:137
octave_matrix(const DiagMatrix &d)
Definition: ov-re-mat.h:72
octave::mach_info::float_format flt_fmt
Definition: load-save.cc:723
octave_matrix(const Matrix &m)
Definition: ov-re-mat.h:60
octave_matrix(void)
Definition: ov-re-mat.h:57
uint32NDArray uint32_array_value(void) const
Definition: ov-re-mat.h:140
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:935
intNDArray< octave_int16 > int16NDArray
Definition: int16NDArray.h:33
bool is_double_type(void) const
Definition: ov-re-mat.h:117
builtin_type_t
Definition: ov-base.h:61
uint64NDArray uint64_array_value(void) const
Definition: ov-re-mat.h:143
octave_matrix(const RowVector &v)
Definition: ov-re-mat.h:75
F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &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 F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T F77_REAL F77_REAL &F77_RET_T F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE * d
int16NDArray int16_array_value(void) const
Definition: ov-re-mat.h:125
bool is_real_matrix(void) const
Definition: ov-re-mat.h:113
bool swap
Definition: load-save.cc:725
#define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
Definition: ov-base.h:148
bool is_real_type(void) const
Definition: ov-re-mat.h:115
OCTAVE_EXPORT octave_value_list any number nd example oindent prints the prompt xample Pick a any number!nd example oindent and waits for the user to enter a value The string entered by the user is evaluated as an so it may be a literal a variable name
Definition: input.cc:871
#define OCTINTERP_API
Definition: mexproto.h:69
intNDArray< octave_int8 > int8NDArray
Definition: int8NDArray.h:33
nd deftypefn *octave_map m
Definition: ov-struct.cc:2058
bool save_as_floats
Definition: load-save.cc:1581
octave_matrix(const ColumnVector &v)
Definition: ov-re-mat.h:78
void decrement(void)
Definition: ov-re-mat.h:214
int64_t octave_hdf5_id
octave_matrix(const Array< double > &m)
Definition: ov-re-mat.h:69
idx type
Definition: ov.cc:3129
Definition: dMatrix.h:37
void * mex_get_data(void) const
Definition: ov-re-mat.h:242
octave_matrix(const octave_matrix &m)
Definition: ov-re-mat.h:81
int32NDArray int32_array_value(void) const
Definition: ov-re-mat.h:128
intNDArray< octave_int32 > int32NDArray
Definition: int32NDArray.h:33
int8NDArray int8_array_value(void) const
Definition: ov-re-mat.h:122
void increment(void)
Definition: ov-re-mat.h:212
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:235
void changesign(void)
Definition: ov-re-mat.h:216
octave_map map(dims)
octave_matrix(const NDArray &nda)
Definition: ov-re-mat.h:66
octave_matrix(const NDArray &nda, const idx_vector &cache)
Definition: ov-re-mat.h:93
std::complex< float > FloatComplex
Definition: oct-cmplx.h:32
octave_base_value * clone(void) const
Definition: ov-re-mat.h:101
uint8NDArray uint8_array_value(void) const
Definition: ov-re-mat.h:134
bool is_float_type(void) const
Definition: ov-re-mat.h:119
std::complex< double > Complex
Definition: oct-cmplx.h:31
builtin_type_t builtin_type(void) const
Definition: ov-re-mat.h:111
write the output to stdout if nargout is
Definition: load-save.cc:1576
Vector representing the dimensions (size) of an Array.
Definition: dim-vector.h:87
idx_vector index_vector(bool=false) const
Definition: ov-re-mat.h:108
intNDArray< octave_uint64 > uint64NDArray
Definition: uint64NDArray.h:33