|
Go to the documentation of this file. 1 #ifndef NPSTAT_ARRAYND_HH_
2 #define NPSTAT_ARRAYND_HH_
18 #include "geners/ClassId.hh"
19 #include "geners/CPP11_auto_ptr.hh"
30 template < typename Numeric, unsigned StackLen=1U, unsigned StackDim=10U>
36 template < typename Numeric, unsigned StackLen, unsigned StackDim,
37 typename Num2, unsigned Len2, unsigned Dim2>
44 template < typename Numeric, unsigned StackLen, unsigned StackDim,
45 typename Num2, unsigned Len2, unsigned Dim2>
52 template < typename Numeric, unsigned StackLen, unsigned StackDim,
53 typename Num2, unsigned Len2, unsigned Dim2>
60 template < typename Numeric, unsigned StackLen, unsigned StackDim,
61 typename Num2, unsigned Len2, unsigned Dim2>
91 template < typename Numeric, unsigned StackLen, unsigned StackDim>
94 template < typename Num2, unsigned Len2, unsigned Dim2>
98 typedef Numeric value_type;
99 typedef typename ProperDblFromCmpl<Numeric>::type proper_double;
146 template < typename Num2, unsigned Len2, unsigned Dim2>
153 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
157 template < typename Num2, unsigned Len2, unsigned Dim2>
162 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
177 template < typename Num2, unsigned Len2, unsigned Dim2>
179 const unsigned* indices, unsigned nIndices);
182 template < typename Num1, unsigned Len1, unsigned Dim1,
183 typename Num2, unsigned Len2, unsigned Dim2>
193 ArrayND( unsigned n0, unsigned n1);
194 ArrayND( unsigned n0, unsigned n1, unsigned n2);
195 ArrayND( unsigned n0, unsigned n1, unsigned n2, unsigned n3);
196 ArrayND( unsigned n0, unsigned n1, unsigned n2, unsigned n3,
198 ArrayND( unsigned n0, unsigned n1, unsigned n2, unsigned n3,
199 unsigned n4, unsigned n5);
200 ArrayND( unsigned n0, unsigned n1, unsigned n2, unsigned n3,
201 unsigned n4, unsigned n5, unsigned n6);
202 ArrayND( unsigned n0, unsigned n1, unsigned n2, unsigned n3,
203 unsigned n4, unsigned n5, unsigned n6, unsigned n7);
204 ArrayND( unsigned n0, unsigned n1, unsigned n2, unsigned n3,
205 unsigned n4, unsigned n5, unsigned n6, unsigned n7,
207 ArrayND( unsigned n0, unsigned n1, unsigned n2, unsigned n3,
208 unsigned n4, unsigned n5, unsigned n6, unsigned n7,
209 unsigned n8, unsigned n9);
229 template < typename Num2, unsigned Len2, unsigned Dim2>
233 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
250 ArrayND& reshape( unsigned n0, unsigned n1, unsigned n2, unsigned n3);
251 ArrayND& reshape( unsigned n0, unsigned n1, unsigned n2, unsigned n3,
253 ArrayND& reshape( unsigned n0, unsigned n1, unsigned n2, unsigned n3,
254 unsigned n4, unsigned n5);
255 ArrayND& reshape( unsigned n0, unsigned n1, unsigned n2, unsigned n3,
256 unsigned n4, unsigned n5, unsigned n6);
257 ArrayND& reshape( unsigned n0, unsigned n1, unsigned n2, unsigned n3,
258 unsigned n4, unsigned n5, unsigned n6, unsigned n7);
259 ArrayND& reshape( unsigned n0, unsigned n1, unsigned n2, unsigned n3,
260 unsigned n4, unsigned n5, unsigned n6, unsigned n7,
262 ArrayND& reshape( unsigned n0, unsigned n1, unsigned n2, unsigned n3,
263 unsigned n4, unsigned n5, unsigned n6, unsigned n7,
264 unsigned n8, unsigned n9);
272 template < typename Num2, unsigned Len2, unsigned Dim2>
280 Numeric& value( const unsigned* index, unsigned indexLen);
281 const Numeric& value( const unsigned* index, unsigned indexLen) const;
287 Numeric& valueAt( const unsigned* index, unsigned indexLen);
288 const Numeric& valueAt( const unsigned* index, unsigned indexLen) const;
292 const Numeric& linearValue( unsigned long index) const;
300 unsigned indexLen) const;
313 unsigned long linearIndex( const unsigned* idx, unsigned idxLen) const;
316 { return linearIndex(sh.empty() ? ( unsigned*)0 : &sh[0], sh.size());}
320 inline unsigned long length() const { return len_;}
323 inline const Numeric* data() const { return data_;}
329 inline unsigned rank() const { return dim_;}
335 inline const unsigned* shapeData() const { return shape_;}
341 unsigned span( unsigned dim) const;
350 inline const unsigned long* strides() const { return strides_;}
359 template < typename Num2>
363 template < unsigned Len2, unsigned Dim2>
367 template < unsigned Len2, unsigned Dim2>
371 template < unsigned Len2, unsigned Dim2>
378 template < typename Num2>
382 template < typename Num2>
390 template < typename Num2>
393 template < typename Num2>
394 ArrayND& operator/=( const Num2& r);
396 template < typename Num2, unsigned Len2, unsigned Dim2>
399 template < typename Num2, unsigned Len2, unsigned Dim2>
402 template < typename Num2, unsigned Len2, unsigned Dim2>
405 template < typename Num2, unsigned Len2, unsigned Dim2>
410 template < typename Num3, typename Num2, unsigned Len2, unsigned Dim2>
414 template < typename Num2, unsigned Len2, unsigned Dim2>
428 template < typename Num2, unsigned Len2, unsigned Dim2>
445 template < typename Num2, unsigned Len2, unsigned Dim2>
447 const unsigned* indexMap, unsigned mapLen) const;
461 template <typename Num2 = typename PreciseType<Numeric>::type>
468 template <typename Num2 = typename PreciseType<Numeric>::type>
479 template <typename Num2 = typename PreciseType<Numeric>::type>
486 template <typename Num2 = typename PreciseType<Numeric>::type>
493 template <typename Num2 = typename PreciseType<Numeric>::type>
494 Num2 cdfValue( const unsigned* index, unsigned indexLen) const;
507 template <typename Num2 = typename PreciseType<Numeric>::type>
515 template < typename Num2, unsigned Len2, unsigned Dim2>
524 template < typename Num2, unsigned Len2, unsigned Dim2>
536 Numeric& closest( const double* x, unsigned xDim);
537 const Numeric& closest( const double* x, unsigned xDim) const;
566 template < class Functor>
576 template < class Functor>
599 template < class Functor>
628 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
648 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
650 const unsigned* thisCorner,
651 const unsigned* range,
652 const unsigned* otherCorner,
654 Functor binaryFunct);
661 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
663 const unsigned* thisCorner,
664 const unsigned* range,
665 const unsigned* otherCorner,
667 Functor binaryFunct);
673 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
675 const unsigned* thisCorner,
676 const unsigned* range,
677 const unsigned* otherCorner,
679 Functor binaryFunct);
685 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
687 const unsigned* thisCorner,
688 const unsigned* range,
689 const unsigned* otherCorner,
691 Functor binaryFunct);
699 template < typename Num2, typename Integer>
710 template < typename Num2, unsigned Len2, unsigned Dim2>
715 template < typename Num2, unsigned Len2, unsigned Dim2>
724 template < typename Num2, unsigned Len2, unsigned Dim2>
737 template < typename Num2, unsigned Len2, unsigned Dim2>
749 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
751 const unsigned* fixedIndices,
752 const unsigned* fixedIndexValues,
753 unsigned nFixedIndices,
754 Functor binaryFunct);
764 template < typename Num2, class Functor>
766 const unsigned* fixedIndices,
767 const unsigned* fixedIndexValues,
768 unsigned nFixedIndices,
769 Functor binaryFunct);
773 unsigned nFixedIndices) const;
776 template < typename Num2, unsigned Len2, unsigned Dim2>
778 const unsigned* fixedIndices,
779 const unsigned* fixedIndexValues,
780 unsigned nFixedIndices) const
783 ( const_cast<ArrayND* >( this))->jointSliceScan(
784 *slice, fixedIndices, fixedIndexValues, nFixedIndices,
792 template < typename Num2>
794 const unsigned* fixedIndices,
795 const unsigned* fixedIndexValues,
796 unsigned nFixedIndices) const
798 ( const_cast<ArrayND* >( this))->jointMemSliceScan(
799 buffer, bufLen, fixedIndices, fixedIndexValues,
804 template < typename Num2, unsigned Len2, unsigned Dim2>
806 const unsigned* fixedIndices,
807 const unsigned* fixedIndexValues,
808 unsigned nFixedIndices)
811 fixedIndices, fixedIndexValues, nFixedIndices,
819 template < typename Num2>
821 const unsigned* fixedIndices,
822 const unsigned* fixedIndexValues,
823 unsigned nFixedIndices)
826 fixedIndices, fixedIndexValues, nFixedIndices,
836 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
838 const unsigned* fixedIndices, unsigned nFixedIndices,
839 Functor binaryFunct);
845 template < typename Num2, unsigned Len2, unsigned Dim2>
847 const unsigned* fixedIndices,
848 unsigned nFixedIndices)
851 fixedIndices, nFixedIndices,
864 template < typename Num2, unsigned Len2, unsigned Dim2, typename Num3>
867 const unsigned* projectedIndices,
868 unsigned nProjectedIndices) const;
870 template < typename Num2, unsigned Len2, unsigned Dim2, typename Num3>
873 const unsigned* projectedIndices,
874 unsigned nProjectedIndices) const;
883 template < typename Num2, unsigned Len2, unsigned Dim2, typename Num3>
886 const unsigned* projectedIndices,
887 unsigned nProjectedIndices) const;
889 template < typename Num2, unsigned Len2, unsigned Dim2, typename Num3>
892 const unsigned* projectedIndices,
893 unsigned nProjectedIndices) const;
895 template < typename Num2, unsigned Len2, unsigned Dim2, typename Num3>
898 const unsigned* projectedIndices,
899 unsigned nProjectedIndices) const;
901 template < typename Num2, unsigned Len2, unsigned Dim2, typename Num3>
904 const unsigned* projectedIndices,
905 unsigned nProjectedIndices) const;
913 template < typename Num2, unsigned Len2, unsigned Dim2>
914 void rotate( const unsigned* shifts, unsigned lenShifts,
922 template < typename Num2, unsigned Len2, unsigned Dim2>
923 void mirror( const unsigned* mirrorDims, unsigned mirrorLen,
931 template < typename Num2, unsigned Len2, unsigned Dim2>
945 Numeric& operator()( unsigned i0, unsigned i1);
946 const Numeric& operator()( unsigned i0, unsigned i1) const;
948 Numeric& operator()( unsigned i0, unsigned i1, unsigned i2);
949 const Numeric& operator()( unsigned i0, unsigned i1, unsigned i2) const;
952 unsigned i2, unsigned i3);
953 const Numeric& operator()( unsigned i0, unsigned i1,
954 unsigned i2, unsigned i3) const;
957 unsigned i2, unsigned i3, unsigned i4);
958 const Numeric& operator()( unsigned i0, unsigned i1,
959 unsigned i2, unsigned i3, unsigned i4) const;
961 Numeric& operator()( unsigned i0, unsigned i1, unsigned i2,
962 unsigned i3, unsigned i4, unsigned i5);
963 const Numeric& operator()( unsigned i0, unsigned i1, unsigned i2,
964 unsigned i3, unsigned i4, unsigned i5) const;
966 Numeric& operator()( unsigned i0, unsigned i1, unsigned i2,
967 unsigned i3, unsigned i4, unsigned i5,
969 const Numeric& operator()( unsigned i0, unsigned i1, unsigned i2,
970 unsigned i3, unsigned i4, unsigned i5,
973 Numeric& operator()( unsigned i0, unsigned i1, unsigned i2,
974 unsigned i3, unsigned i4, unsigned i5,
975 unsigned i6, unsigned i7);
976 const Numeric& operator()( unsigned i0, unsigned i1, unsigned i2,
977 unsigned i3, unsigned i4, unsigned i5,
978 unsigned i6, unsigned i7) const;
980 Numeric& operator()( unsigned i0, unsigned i1, unsigned i2,
981 unsigned i3, unsigned i4, unsigned i5,
982 unsigned i6, unsigned i7, unsigned i8);
983 const Numeric& operator()( unsigned i0, unsigned i1, unsigned i2,
984 unsigned i3, unsigned i4, unsigned i5,
985 unsigned i6, unsigned i7, unsigned i8) const;
987 Numeric& operator()( unsigned i0, unsigned i1, unsigned i2,
988 unsigned i3, unsigned i4, unsigned i5,
989 unsigned i6, unsigned i7, unsigned i8,
991 const Numeric& operator()( unsigned i0, unsigned i1, unsigned i2,
992 unsigned i3, unsigned i4, unsigned i5,
993 unsigned i6, unsigned i7, unsigned i8,
1003 const Numeric& at() const;
1005 Numeric& at( unsigned i0);
1006 const Numeric& at( unsigned i0) const;
1008 Numeric& at( unsigned i0, unsigned i1);
1009 const Numeric& at( unsigned i0, unsigned i1) const;
1011 Numeric& at( unsigned i0, unsigned i1, unsigned i2);
1012 const Numeric& at( unsigned i0, unsigned i1, unsigned i2) const;
1014 Numeric& at( unsigned i0, unsigned i1,
1015 unsigned i2, unsigned i3);
1016 const Numeric& at( unsigned i0, unsigned i1,
1017 unsigned i2, unsigned i3) const;
1019 Numeric& at( unsigned i0, unsigned i1,
1020 unsigned i2, unsigned i3, unsigned i4);
1021 const Numeric& at( unsigned i0, unsigned i1,
1022 unsigned i2, unsigned i3, unsigned i4) const;
1024 Numeric& at( unsigned i0, unsigned i1, unsigned i2,
1025 unsigned i3, unsigned i4, unsigned i5);
1026 const Numeric& at( unsigned i0, unsigned i1, unsigned i2,
1027 unsigned i3, unsigned i4, unsigned i5) const;
1029 Numeric& at( unsigned i0, unsigned i1, unsigned i2,
1030 unsigned i3, unsigned i4, unsigned i5,
1032 const Numeric& at( unsigned i0, unsigned i1, unsigned i2,
1033 unsigned i3, unsigned i4, unsigned i5,
1036 Numeric& at( unsigned i0, unsigned i1, unsigned i2,
1037 unsigned i3, unsigned i4, unsigned i5,
1038 unsigned i6, unsigned i7);
1039 const Numeric& at( unsigned i0, unsigned i1, unsigned i2,
1040 unsigned i3, unsigned i4, unsigned i5,
1041 unsigned i6, unsigned i7) const;
1043 Numeric& at( unsigned i0, unsigned i1, unsigned i2,
1044 unsigned i3, unsigned i4, unsigned i5,
1045 unsigned i6, unsigned i7, unsigned i8);
1046 const Numeric& at( unsigned i0, unsigned i1, unsigned i2,
1047 unsigned i3, unsigned i4, unsigned i5,
1048 unsigned i6, unsigned i7, unsigned i8) const;
1050 Numeric& at( unsigned i0, unsigned i1, unsigned i2,
1051 unsigned i3, unsigned i4, unsigned i5,
1052 unsigned i6, unsigned i7, unsigned i8,
1054 const Numeric& at( unsigned i0, unsigned i1, unsigned i2,
1055 unsigned i3, unsigned i4, unsigned i5,
1056 unsigned i6, unsigned i7, unsigned i8,
1066 const Numeric& cl() const;
1068 Numeric& cl( double x0);
1069 const Numeric& cl( double x0) const;
1071 Numeric& cl( double x0, double x1);
1072 const Numeric& cl( double x0, double x1) const;
1074 Numeric& cl( double x0, double x1, double x2);
1075 const Numeric& cl( double x0, double x1, double x2) const;
1077 Numeric& cl( double x0, double x1,
1078 double x2, double x3);
1079 const Numeric& cl( double x0, double x1,
1080 double x2, double x3) const;
1082 Numeric& cl( double x0, double x1,
1083 double x2, double x3, double x4);
1084 const Numeric& cl( double x0, double x1,
1085 double x2, double x3, double x4) const;
1087 Numeric& cl( double x0, double x1, double x2,
1088 double x3, double x4, double x5);
1089 const Numeric& cl( double x0, double x1, double x2,
1090 double x3, double x4, double x5) const;
1092 Numeric& cl( double x0, double x1, double x2,
1093 double x3, double x4, double x5,
1095 const Numeric& cl( double x0, double x1, double x2,
1096 double x3, double x4, double x5,
1099 Numeric& cl( double x0, double x1, double x2,
1100 double x3, double x4, double x5,
1101 double x6, double x7);
1102 const Numeric& cl( double x0, double x1, double x2,
1103 double x3, double x4, double x5,
1104 double x6, double x7) const;
1106 Numeric& cl( double x0, double x1, double x2,
1107 double x3, double x4, double x5,
1108 double x6, double x7, double x8);
1109 const Numeric& cl( double x0, double x1, double x2,
1110 double x3, double x4, double x5,
1111 double x6, double x7, double x8) const;
1113 Numeric& cl( double x0, double x1, double x2,
1114 double x3, double x4, double x5,
1115 double x6, double x7, double x8,
1117 const Numeric& cl( double x0, double x1, double x2,
1118 double x3, double x4, double x5,
1119 double x6, double x7, double x8,
1125 inline gs::ClassId classId() const { return gs::ClassId(* this);}
1126 bool write(std::ostream& of) const;
1129 static const char* classname();
1130 static inline unsigned version() { return 1;}
1131 static void restore( const gs::ClassId& id, std::istream& in,
1134 Numeric localData_[StackLen];
1137 unsigned long localStrides_[StackDim];
1138 unsigned long *strides_;
1140 unsigned localShape_[StackDim];
1147 bool dataIsExternal_;
1150 void buildFromShapePtr( const unsigned*, unsigned);
1154 void buildExtFromShapePtr( const unsigned*, unsigned, Numeric*);
1157 void buildStrides();
1160 void linearFillLoop( unsigned level, double s0,
1161 unsigned long idx, double shift,
1162 const double* coeffs);
1165 template < class Functor>
1166 void functorFillLoop( unsigned level, unsigned long idx,
1167 Functor f, unsigned* farg);
1170 Numeric interpolateLoop( unsigned level, const double* x,
1171 const Numeric* base) const;
1174 template < typename Num1, unsigned Len1, unsigned Dim1,
1175 typename Num2, unsigned Len2, unsigned Dim2>
1176 void outerProductLoop( unsigned level, unsigned long idx0,
1177 unsigned long idx1, unsigned long idx2,
1178 const ArrayND<Num1, Len1, Dim1>& a1,
1179 const ArrayND<Num2, Len2, Dim2>& a2);
1182 void contractLoop( unsigned thisLevel, unsigned resLevel,
1183 unsigned pos1, unsigned pos2,
1184 unsigned long idxThis, unsigned long idxRes,
1185 ArrayND& result) const;
1188 void transposeLoop( unsigned level, unsigned pos1, unsigned pos2,
1189 unsigned long idxThis, unsigned long idxRes,
1190 ArrayND& result) const;
1193 template < typename Num2, unsigned Len2, unsigned Dim2>
1194 void dotProductLoop( unsigned level, unsigned long idx0,
1195 unsigned long idx1, unsigned long idx2,
1196 const ArrayND<Num2, Len2, Dim2>& r,
1197 ArrayND& result) const;
1200 template < typename Num2, unsigned Len2, unsigned Dim2>
1201 Numeric marginalizeInnerLoop( unsigned long idx,
1202 unsigned levelPr, unsigned long idxPr,
1203 const ArrayND<Num2,Len2,Dim2>& prior,
1204 const unsigned* indexMap) const;
1205 template < typename Num2, unsigned Len2, unsigned Dim2>
1206 void marginalizeLoop( unsigned level, unsigned long idx,
1207 unsigned levelRes, unsigned long idxRes,
1208 const ArrayND<Num2,Len2,Dim2>& prior,
1209 const unsigned* indexMap, ArrayND& res) const;
1213 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
1214 void copyRangeLoopFunct( unsigned level, unsigned long idx0,
1216 const ArrayND<Num2, Len2, Dim2>& r,
1217 const ArrayRange& range, Functor f);
1222 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
1223 void commonSubrangeLoop( unsigned level, unsigned long idx0,
1225 const unsigned* thisCorner,
1226 const unsigned* range,
1227 const unsigned* otherCorner,
1228 ArrayND<Num2, Len2, Dim2>& other,
1229 Functor binaryFunct);
1233 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
1234 void dualCircularLoop( unsigned level, unsigned long idx0,
1236 const unsigned* thisCorner,
1237 const unsigned* range,
1238 const unsigned* otherCorner,
1239 ArrayND<Num2, Len2, Dim2>& other,
1240 Functor binaryFunct);
1246 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
1247 void flatCircularLoop( unsigned level, unsigned long idx0,
1249 const unsigned* thisCorner,
1250 const unsigned* range,
1251 const unsigned* otherCorner,
1252 ArrayND<Num2, Len2, Dim2>& other,
1253 Functor binaryFunct);
1258 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
1259 void circularFlatLoop( unsigned level, unsigned long idx0,
1261 const unsigned* thisCorner,
1262 const unsigned* range,
1263 const unsigned* otherCorner,
1264 ArrayND<Num2, Len2, Dim2>& other,
1265 Functor binaryFunct);
1268 template < typename Num2, unsigned Len2, unsigned Dim2>
1269 unsigned long verifySliceCompatibility(
1270 const ArrayND<Num2,Len2,Dim2>& slice,
1271 const unsigned* fixedIndices,
1272 const unsigned* fixedIndexValues,
1273 unsigned nFixedIndices) const;
1276 unsigned long verifyBufferSliceCompatibility(
1277 unsigned long bufLen,
1278 const unsigned* fixedIndices,
1279 const unsigned* fixedIndexValues,
1280 unsigned nFixedIndices,
1281 unsigned long* sliceStrides) const;
1284 template < typename Num2, class Functor>
1285 void jointSliceLoop( unsigned level, unsigned long idx0,
1286 unsigned level1, unsigned long idx1,
1287 Num2* sliceData, const unsigned long* sliceStrides,
1288 const unsigned* fixedIndices,
1289 const unsigned* fixedIndexValues,
1290 unsigned nFixedIndices, Functor binaryFunctor);
1293 template < typename Num2, class Functor>
1294 void scaleBySliceInnerLoop( unsigned level, unsigned long idx0,
1296 const unsigned* projectedIndices,
1297 unsigned nProjectedIndices,
1298 Functor binaryFunct);
1300 template < typename Num2, unsigned Len2, unsigned Dim2, class Functor>
1301 void scaleBySliceLoop( unsigned level, unsigned long idx0,
1302 unsigned level1, unsigned long idx1,
1303 ArrayND<Num2,Len2,Dim2>& slice,
1304 const unsigned* fixedIndices,
1305 unsigned nFixedIndices,
1306 Functor binaryFunct);
1309 template < typename Num2>
1310 void projectInnerLoop( unsigned level, unsigned long idx0,
1311 unsigned* currentIndex,
1312 AbsArrayProjector<Numeric,Num2>& projector,
1313 const unsigned* projectedIndices,
1314 unsigned nProjectedIndices) const;
1316 template < typename Num2, unsigned Len2, unsigned Dim2,
1317 typename Num3, class Op>
1318 void projectLoop( unsigned level, unsigned long idx0,
1319 unsigned level1, unsigned long idx1,
1320 unsigned* currentIndex,
1321 ArrayND<Num2,Len2,Dim2>* projection,
1322 AbsArrayProjector<Numeric,Num3>& projector,
1323 const unsigned* projectedIndices,
1324 unsigned nProjectedIndices, Op fcn) const;
1336 template < typename Num2, unsigned Len2, unsigned Dim2,
1337 typename Num3, class Op>
1338 void projectLoop2( unsigned level, unsigned long idx0,
1339 unsigned level1, unsigned long idx1,
1340 ArrayND<Num2,Len2,Dim2>* projection,
1341 AbsVisitor<Numeric,Num3>& projector,
1342 const unsigned* projectedIndices,
1343 unsigned nProjectedIndices, Op fcn) const;
1345 template < typename Num2>
1346 void projectInnerLoop2( unsigned level, unsigned long idx0,
1347 AbsVisitor<Numeric,Num2>& projector,
1348 const unsigned* projectedIndices,
1349 unsigned nProjectedIndices) const;
1351 template < typename Num2, typename Integer>
1352 void processSubrangeLoop( unsigned level, unsigned long idx0,
1353 unsigned* currentIndex,
1354 AbsArrayProjector<Numeric,Num2>& f,
1355 const BoxND<Integer>& subrange) const;
1358 template < typename Accumulator>
1359 Accumulator sumBelowLoop( unsigned level, unsigned long idx0,
1360 const unsigned* limit) const;
1363 template < typename Accumulator>
1364 void convertToLastDimCdfLoop(ArrayND* sumSlice, unsigned level,
1366 unsigned long idxSlice,
1367 bool useTrapezoids);
1371 unsigned coordToIndex( double coord, unsigned idim) const;
1374 template < typename Num2, unsigned Len2, unsigned Dim2>
1375 void verifyProjectionCompatibility(
1376 const ArrayND<Num2,Len2,Dim2>& projection,
1377 const unsigned* projectedIndices,
1378 unsigned nProjectedIndices) const;
1380 template < typename Num2, unsigned Len2, unsigned Dim2>
1381 void coarseSum2( unsigned idim, ArrayND<Num2,Len2,Dim2>* result) const;
1383 template < typename Num2, unsigned Len2, unsigned Dim2>
1384 void coarseSum3( unsigned idim, ArrayND<Num2,Len2,Dim2>* result) const;
1386 template < typename Num2, unsigned Len2, unsigned Dim2>
1387 void coarseSumN( unsigned idim, unsigned n,
1388 ArrayND<Num2,Len2,Dim2>* result) const;
1390 template < typename Num2>
1391 friend ArrayND<Num2> externalMemArrayND(Num2* data,
1392 const unsigned* shape, unsigned dim);
1393 template < typename Num2>
1396 template < typename Num2>
1397 friend ArrayND<Num2> externalMemArrayND(Num2* data, unsigned n0);
1399 template < typename Num2>
1400 friend ArrayND<Num2> externalMemArrayND(Num2* data, unsigned n0, unsigned n1);
1402 template < typename Num2>
1403 friend ArrayND<Num2> externalMemArrayND(Num2* data, unsigned n0, unsigned n1,
1405 template < typename Num2>
1406 friend ArrayND<Num2> externalMemArrayND(Num2* data, unsigned n0, unsigned n1,
1407 unsigned n2, unsigned n3);
1408 template < typename Num2>
1409 friend ArrayND<Num2> externalMemArrayND(Num2* data, unsigned n0, unsigned n1,
1410 unsigned n2, unsigned n3, unsigned n4);
1411 template < typename Num2>
1412 friend ArrayND<Num2> externalMemArrayND(Num2* data, unsigned n0, unsigned n1,
1413 unsigned n2, unsigned n3, unsigned n4,
1415 template < typename Num2>
1416 friend ArrayND<Num2> externalMemArrayND(Num2* data, unsigned n0, unsigned n1,
1417 unsigned n2, unsigned n3, unsigned n4,
1418 unsigned n5, unsigned n6);
1419 template < typename Num2>
1420 friend ArrayND<Num2> externalMemArrayND(Num2* data, unsigned n0, unsigned n1,
1421 unsigned n2, unsigned n3, unsigned n4,
1422 unsigned n5, unsigned n6, unsigned n7);
1423 template < typename Num2>
1424 friend ArrayND<Num2> externalMemArrayND(Num2* data, unsigned n0, unsigned n1,
1425 unsigned n2, unsigned n3, unsigned n4,
1426 unsigned n5, unsigned n6, unsigned n7,
1428 template < typename Num2>
1429 friend ArrayND<Num2> externalMemArrayND(Num2* data, unsigned n0, unsigned n1,
1430 unsigned n2, unsigned n3, unsigned n4,
1431 unsigned n5, unsigned n6, unsigned n7,
1432 unsigned n8, unsigned n9);
1433 template < typename Num2>
1434 friend CPP11_auto_ptr<ArrayND<Num2> > allocExternalMemArrayND(
1435 Num2* data, const unsigned* shape, unsigned dim);
1437 template < typename Num2>
1438 friend CPP11_auto_ptr<ArrayND<Num2> > allocExternalMemArrayND(
1441 template < typename Num3, unsigned Len3, unsigned Dim3,
1442 typename Num2, unsigned Len2, unsigned Dim2>
1455 template < typename Num3, unsigned Len3, unsigned Dim3,
1456 typename Num2, unsigned Len2, unsigned Dim2>
1469 template < typename Num3, unsigned Len3, unsigned Dim3,
1470 typename Num2, unsigned Len2, unsigned Dim2>
1483 template < typename Num3, unsigned Len3, unsigned Dim3,
1484 typename Num2, unsigned Len2, unsigned Dim2>
1516 inline void setValue( const unsigned* indexS, unsigned indexLenS,
1518 { valueAt(indexS, indexLenS) = v;}
1519 inline Numeric getValue( const unsigned* indexS, unsigned indexLenS) const
1520 { return valueAt(indexS, indexLenS);}
1522 inline void setLinearValue( unsigned long index, Numeric v)
1524 inline Numeric getLinearValue( unsigned long index) const
1527 inline void setClosest( const double* x, unsigned xDim, Numeric v)
1529 const Numeric getClosest( const double* x, unsigned xDim) const
1532 inline void set(Numeric v)
1534 inline Numeric get() const
1537 inline void set( unsigned i0, Numeric v)
1539 inline Numeric get( unsigned i0) const
1542 inline void set( unsigned i0, unsigned i1, Numeric v)
1544 inline Numeric get( unsigned i0, unsigned i1) const
1547 inline void set( unsigned i0, unsigned i1, unsigned i2, Numeric v)
1549 inline Numeric get( unsigned i0, unsigned i1, unsigned i2) const
1550 { return at(i0,i1,i2);}
1552 inline void set( unsigned i0, unsigned i1,
1553 unsigned i2, unsigned i3, Numeric v)
1554 { at(i0,i1,i2,i3) = v;}
1555 inline Numeric get( unsigned i0, unsigned i1,
1556 unsigned i2, unsigned i3) const
1557 { return at(i0,i1,i2,i3);}
1559 inline void set( unsigned i0, unsigned i1,
1560 unsigned i2, unsigned i3, unsigned i4, Numeric v)
1561 { at(i0,i1,i2,i3,i4) = v;}
1562 inline Numeric get( unsigned i0, unsigned i1,
1563 unsigned i2, unsigned i3, unsigned i4) const
1564 { return at(i0,i1,i2,i3,i4);}
1566 inline void set( unsigned i0, unsigned i1, unsigned i2,
1567 unsigned i3, unsigned i4, unsigned i5, Numeric v)
1568 { at(i0,i1,i2,i3,i4,i5) = v;}
1569 inline Numeric get( unsigned i0, unsigned i1, unsigned i2,
1570 unsigned i3, unsigned i4, unsigned i5) const
1571 { return at(i0,i1,i2,i3,i4,i5);}
1573 inline void set( unsigned i0, unsigned i1, unsigned i2,
1574 unsigned i3, unsigned i4, unsigned i5,
1575 unsigned i6, Numeric v)
1576 { at(i0,i1,i2,i3,i4,i5,i6) = v;}
1577 inline Numeric get( unsigned i0, unsigned i1, unsigned i2,
1578 unsigned i3, unsigned i4, unsigned i5,
1580 { return at(i0,i1,i2,i3,i4,i5,i6);}
1582 inline void set( unsigned i0, unsigned i1, unsigned i2,
1583 unsigned i3, unsigned i4, unsigned i5,
1584 unsigned i6, unsigned i7, Numeric v)
1585 { at(i0,i1,i2,i3,i4,i5,i6,i7) = v;}
1586 inline Numeric get( unsigned i0, unsigned i1, unsigned i2,
1587 unsigned i3, unsigned i4, unsigned i5,
1588 unsigned i6, unsigned i7) const
1589 { return at(i0,i1,i2,i3,i4,i5,i6,i7);}
1591 inline void set( unsigned i0, unsigned i1, unsigned i2,
1592 unsigned i3, unsigned i4, unsigned i5,
1593 unsigned i6, unsigned i7, unsigned i8, Numeric v)
1594 { at(i0,i1,i2,i3,i4,i5,i6,i7,i8) = v;}
1595 inline Numeric get( unsigned i0, unsigned i1, unsigned i2,
1596 unsigned i3, unsigned i4, unsigned i5,
1597 unsigned i6, unsigned i7, unsigned i8) const
1598 { return at(i0,i1,i2,i3,i4,i5,i6,i7,i8);}
1600 inline void set( unsigned i0, unsigned i1, unsigned i2,
1601 unsigned i3, unsigned i4, unsigned i5,
1602 unsigned i6, unsigned i7, unsigned i8,
1603 unsigned i9, Numeric v)
1604 { at(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9) = v;}
1605 inline Numeric get( unsigned i0, unsigned i1, unsigned i2,
1606 unsigned i3, unsigned i4, unsigned i5,
1607 unsigned i6, unsigned i7, unsigned i8,
1609 { return at(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9);}
1611 inline void setCl(Numeric v)
1613 inline Numeric getCl() const
1616 inline void setCl( double x0, Numeric v)
1618 inline Numeric getCl( double x0) const
1621 inline void setCl( double x0, double x1, Numeric v)
1623 inline Numeric getCl( double x0, double x1) const
1624 { return cl(x0, x1);}
1626 inline void setCl( double x0, double x1, double x2, Numeric v)
1627 { cl(x0, x1, x2) = v;}
1628 inline Numeric getCl( double x0, double x1, double x2) const
1629 { return cl(x0, x1, x2);}
1631 inline void setCl( double x0, double x1,
1632 double x2, double x3, Numeric v)
1633 { cl(x0, x1, x2, x3) = v;}
1634 inline Numeric getCl( double x0, double x1,
1635 double x2, double x3) const
1636 { return cl(x0, x1, x2, x3);}
1638 inline void setCl( double x0, double x1,
1639 double x2, double x3, double x4, Numeric v)
1640 { cl(x0, x1, x2, x3, x4) = v;}
1641 inline Numeric getCl( double x0, double x1,
1642 double x2, double x3, double x4) const
1643 { return cl(x0, x1, x2, x3, x4);}
1645 inline void setCl( double x0, double x1, double x2,
1646 double x3, double x4, double x5, Numeric v)
1647 { cl(x0, x1, x2, x3, x4, x5) = v;}
1648 inline Numeric getCl( double x0, double x1, double x2,
1649 double x3, double x4, double x5) const
1650 { return cl(x0, x1, x2, x3, x4, x5);}
1652 inline void setCl( double x0, double x1, double x2,
1653 double x3, double x4, double x5,
1654 double x6, Numeric v)
1655 { cl(x0, x1, x2, x3, x4, x5, x6) = v;}
1656 inline Numeric getCl( double x0, double x1, double x2,
1657 double x3, double x4, double x5,
1659 { return cl(x0, x1, x2, x3, x4, x5, x6);}
1661 inline void setCl( double x0, double x1, double x2,
1662 double x3, double x4, double x5,
1663 double x6, double x7, Numeric v)
1664 { cl(x0, x1, x2, x3, x4, x5, x6, x7) = v;}
1665 inline Numeric getCl( double x0, double x1, double x2,
1666 double x3, double x4, double x5,
1667 double x6, double x7) const
1668 { return cl(x0, x1, x2, x3, x4, x5, x6, x7);}
1670 inline void setCl( double x0, double x1, double x2,
1671 double x3, double x4, double x5,
1672 double x6, double x7, double x8, Numeric v)
1673 { cl(x0, x1, x2, x3, x4, x5, x6, x7, x8) = v;}
1674 inline Numeric getCl( double x0, double x1, double x2,
1675 double x3, double x4, double x5,
1676 double x6, double x7, double x8) const
1677 { return cl(x0, x1, x2, x3, x4, x5, x6, x7, x8);}
1679 inline void setCl( double x0, double x1, double x2,
1680 double x3, double x4, double x5,
1681 double x6, double x7, double x8,
1682 double x9, Numeric v)
1683 { cl(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9) = v;}
1684 inline Numeric getCl( double x0, double x1, double x2,
1685 double x3, double x4, double x5,
1686 double x6, double x7, double x8,
1688 { return cl(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9);}
1690 inline void setData2( const Numeric* data, unsigned long dataLength)
1693 inline double maxAbsDifference2( const ArrayND& r) const
1696 inline bool isEqual2( const ArrayND& r) const
1697 { return * this == r;}
1699 inline bool notEqual2( const ArrayND& r) const
1700 { return !(* this == r);}
1702 inline ArrayND plus2( const ArrayND& r) const
1705 inline ArrayND minus2( const ArrayND& r) const
1708 inline ArrayND arrmul2( const ArrayND& r) const
1711 inline ArrayND arrdiv2( const ArrayND& r) const
1714 inline ArrayND mul2( const double r) const
1715 { return * this * static_cast<proper_double >(r);}
1717 inline ArrayND rmul2( const double r) const
1718 { return * this * static_cast<proper_double >(r);}
1720 inline ArrayND div2( const double r) const
1721 { return * this / static_cast<proper_double >(r);}
1723 inline ArrayND& iarrmul2( const ArrayND& r)
1724 {* this *= r; return * this;}
1726 inline ArrayND& iarrdiv2( const ArrayND& r)
1727 {* this /= r; return * this;}
1729 inline ArrayND& iadd2( const ArrayND& r)
1730 {* this += r; return * this;}
1732 inline ArrayND& isub2( const ArrayND& r)
1733 {* this -= r; return * this;}
1735 inline ArrayND& imul2( const double r)
1736 {* this *= static_cast<proper_double >(r); return * this;}
1738 inline ArrayND& idiv2( const double r)
1739 {* this /= static_cast<proper_double >(r); return * this;}
1741 inline ArrayND& addmul2( const ArrayND& r, const double c)
1742 { return addmul(r, static_cast<proper_double >(c));}
1744 inline ArrayND outer2( const ArrayND& r) const
1747 inline ArrayND dot2( const ArrayND& r) const
1750 inline ArrayND marginalize2(
1751 const ArrayND<proper_double>& r,
1752 const unsigned* indexMapX, const unsigned mapLenX) const
1755 inline Numeric sum2() const
1756 { return static_cast<Numeric >((*this).template sum<
1757 typename PreciseType<Numeric>::type>());}
1759 inline double sumsq2() const
1760 { return (*this).template sumsq<long double>();}
1762 inline ArrayND derivative2( double scale=1.0) const
1764 typename PreciseType<Numeric>::type>(scale);}
1766 inline ArrayND cdfArray2( double scale=1.0) const
1768 typename PreciseType<Numeric>::type>(scale);}
1770 inline Numeric cdfValue2( const unsigned* indexS, unsigned indexLenS) const
1771 { return static_cast<Numeric >((*this).template cdfValue<
1772 typename PreciseType<Numeric>::type>(indexS, indexLenS));}
1774 inline void convertToLastDimCdf2(ArrayND* sumSlice, bool b)
1776 typename PreciseType<Numeric>::type>(sumSlice, b);}
1778 inline bool isClose2( const ArrayND& r, double eps) const
1781 inline bool isShapeCompatible2( const ArrayND& r) const
1784 inline void exportSlice2(
1786 const unsigned* fixedIndicesS, unsigned nFixedIndicesS,
1787 const unsigned* fixedIndexValuesS, unsigned nFixedValuesS) const
1789 if (nFixedIndicesS != nFixedValuesS) throw std::invalid_argument(
1790 "In npstat::ArrayND::exportSlice2: incompatible inputs");
1791 exportSlice(slice, fixedIndicesS, fixedIndexValuesS, nFixedIndicesS);
1794 inline void exportMemSlice2(Numeric* slice, unsigned long len,
1795 const unsigned* fixedIndices,
1796 const unsigned* fixedIndexValues,
1797 unsigned nFixedInd) const
1799 fixedIndexValues, nFixedInd);}
1801 inline void importSlice2(
1802 const ArrayND& slice,
1803 const unsigned* fixedIndicesS, unsigned nFixedIndicesS,
1804 const unsigned* fixedIndexValuesS, unsigned nFixedValuesS)
1806 if (nFixedIndicesS != nFixedValuesS) throw std::invalid_argument(
1807 "In npstat::ArrayND::importSlice2: incompatible inputs");
1808 importSlice(slice, fixedIndicesS, fixedIndexValuesS, nFixedIndicesS);
1811 inline void importMemSlice2( const Numeric* slice, unsigned long len,
1812 const unsigned* fixedIndices,
1813 const unsigned* fixedIndexValues,
1816 fixedIndexValues, nFixedInd);}
1818 inline ArrayND& multiplyBySlice2(
1819 const ArrayND<proper_double>& slice,
1820 const unsigned* fixedIndicesS, unsigned nFixedIndicesS)
1823 inline ArrayND subrange( const ArrayRange& range)
1824 { return ArrayND(* this, range);}
1826 inline ArrayND slice( const unsigned* indexS, unsigned indexLenS)
1827 { return ArrayND(* this, indexS, indexLenS);}
1829 inline void rotate2( const unsigned* shiftsX, unsigned lenShiftsX,
1830 ArrayND* rotated) const
1831 { rotate(shiftsX, lenShiftsX, rotated);}
1833 inline void mirror2( const unsigned* mirrorDims, unsigned mirrorLen,
1834 ArrayND* mirrored) const
1835 { mirror(mirrorDims, mirrorLen, mirrored);}
1837 inline void exportSubrange2( const unsigned* cornerS, unsigned lenCornerS,
1841 inline void importSubrange2( const unsigned* cornerS, unsigned lenCornerS,
1842 const ArrayND& from)
1845 inline void multiMirror2(ArrayND* out) const
1865 template < typename Numeric>
1867 const unsigned* shape, unsigned dim);
1868 template < typename Numeric>
1871 template < typename Numeric>
1874 template < typename Numeric>
1877 template < typename Numeric>
1880 template < typename Numeric>
1882 unsigned n2, unsigned n3);
1883 template < typename Numeric>
1885 unsigned n2, unsigned n3, unsigned n4);
1886 template < typename Numeric>
1888 unsigned n2, unsigned n3, unsigned n4,
1890 template < typename Numeric>
1892 unsigned n2, unsigned n3, unsigned n4,
1893 unsigned n5, unsigned n6);
1894 template < typename Numeric>
1896 unsigned n2, unsigned n3, unsigned n4,
1897 unsigned n5, unsigned n6, unsigned n7);
1898 template < typename Numeric>
1900 unsigned n2, unsigned n3, unsigned n4,
1901 unsigned n5, unsigned n6, unsigned n7,
1903 template < typename Numeric>
1905 unsigned n2, unsigned n3, unsigned n4,
1906 unsigned n5, unsigned n6, unsigned n7,
1907 unsigned n8, unsigned n9);
1909 template < typename Numeric>
1910 CPP11_auto_ptr<ArrayND<Numeric> > allocExternalMemArrayND(
1911 Numeric* data, const unsigned* shape, unsigned dim);
1913 template < typename Numeric>
1914 CPP11_auto_ptr<ArrayND<Numeric> > allocExternalMemArrayND(
1939 std::pair<typename Arr::value_type, typename Arr::value_type>
1954 template < typename Num2, typename Numeric, unsigned StackLen, unsigned StackDim>
1961 #include "npstat/nm/ArrayND.icc"
Interface definition for functors used to make array projections.
Interface for piecemeal processing of a data collection.
npstat::ArrayND< typename npstat::LongerType< Numeric, Num2 >::type, npstat::BiggerUInt< StackLen, Len2 >::value, npstat::BiggerUInt< StackDim, Dim2 >::value > operator+(const npstat::ArrayND< Numeric, StackLen, StackDim > &l, const npstat::ArrayND< Num2, Len2, Dim2 > &r)
Multidimensional range of array indices.
Compile-time deduction of an appropriate numeric type for simple algebraic operations.
Compile-time deduction of an appropriate precise numeric type.
Compile-time deduction of the underlying floating point type from the given complex type.
Interface definitions and concrete simple functors for a variety of functor-based calculations.
Definition: ArrayND.hh:93
ArrayND & makeNonNegative()
ArrayND & multiplyBySlice(const ArrayND< Num2, Len2, Dim2 > &slice, const unsigned *fixedIndices, unsigned nFixedIndices) Definition: ArrayND.hh:846
ArrayND & functorFill(Functor f)
void flatCircularScan(ArrayND< Num2, Len2, Dim2 > &other, const unsigned *thisCorner, const unsigned *range, const unsigned *otherCorner, unsigned arrLen, Functor binaryFunct)
ArrayND & reshape(const ArrayND< Num2, Len2, Dim2 > &r)
ArrayND(const ArrayND< Num2, Len2, Dim2 > &from, const ArrayRange &fromRange)
unsigned long linearIndex(const unsigned *idx, unsigned idxLen) const
void convertLinearIndex(unsigned long l, unsigned *index, unsigned indexLen) const
void project(ArrayND< Num2, Len2, Dim2 > *projection, AbsArrayProjector< Numeric, Num3 > &projector, const unsigned *projectedIndices, unsigned nProjectedIndices) const
bool isShapeCompatible(const ArrayND< Num2, Len2, Dim2 > &r) const
Numeric & closest(const double *x, unsigned xDim)
void dualCircularScan(ArrayND< Num2, Len2, Dim2 > &other, const unsigned *thisCorner, const unsigned *range, const unsigned *otherCorner, unsigned arrLen, Functor binaryFunct)
ArrayND & operator=(const ArrayND< Num2, Len2, Dim2 > &)
ArrayND & constFill(Numeric c)
double maxAbsDifference(const ArrayND< Numeric, Len2, Dim2 > &) const
unsigned rank() const Definition: ArrayND.hh:329
ArrayND & addmul(const ArrayND< Num2, Len2, Dim2 > &r, const Num3 &c)
void importMemSlice(const Num2 *buffer, unsigned long bufLen, const unsigned *fixedIndices, const unsigned *fixedIndexValues, unsigned nFixedIndices) Definition: ArrayND.hh:820
ArrayRange fullRange() const
void jointScan(ArrayND< Num2, Len2, Dim2 > &other, Functor binaryFunct)
Numeric interpolate3(const double *x, unsigned xDim) const
void addToProjection(ArrayND< Num2, Len2, Dim2 > *projection, AbsArrayProjector< Numeric, Num3 > &projector, const unsigned *projectedIndices, unsigned nProjectedIndices) const
ArrayND & apply(Functor f)
ArrayND(const ArrayND< Num2, Len2, Dim2 > &, Functor f)
void circularFlatScan(ArrayND< Num2, Len2, Dim2 > &other, const unsigned *thisCorner, const unsigned *range, const unsigned *otherCorner, unsigned arrLen, Functor binaryFunct)
void processSubrange(AbsArrayProjector< Numeric, Num2 > &f, const BoxND< Integer > &subrange) const
ArrayND operator+() const
ArrayND & scanInPlace(Functor f)
ArrayND & operator=(ArrayND &&)
const unsigned long * strides() const Definition: ArrayND.hh:350
bool isCompatible(const ArrayShape &shape) const
void mirror(const unsigned *mirrorDims, unsigned mirrorLen, ArrayND< Num2, Len2, Dim2 > *out) const
ArrayND transpose(unsigned pos1, unsigned pos2) const
ArrayND & assign(const ArrayND< Num2, Len2, Dim2 > &, Functor f)
ArrayND transpose() const
void exportSubrange(const unsigned *fromCorner, unsigned lenCorner, ArrayND< Num2, Len2, Dim2 > *dest) const
ArrayND outer(const ArrayND< Num2, Len2, Dim2 > &r) const
ArrayND & setData(const Num2 *data, unsigned long dataLength)
ArrayND dot(const ArrayND< Num2, Len2, Dim2 > &r) const
void rotate(const unsigned *shifts, unsigned lenShifts, ArrayND< Num2, Len2, Dim2 > *rotated) const
ArrayRange nonZeroRange() const
void convertToLastDimCdf(ArrayND *sumSlice, bool useTrapezoids)
bool isClose(const ArrayND< Num2, Len2, Dim2 > &r, double eps) const
ArrayND(const ArrayND< Num2, Len2, Dim2 > &slicedArray, const unsigned *indices, unsigned nIndices)
void jointMemSliceScan(Num2 *buffer, unsigned long bufLen, const unsigned *fixedIndices, const unsigned *fixedIndexValues, unsigned nFixedIndices, Functor binaryFunct)
unsigned long length() const Definition: ArrayND.hh:320
unsigned minimumSpan() const
ArrayND & operator*=(const Num2 &r)
ArrayND(const ArrayND< Num2, Len2, Dim2 > &)
void exportMemSlice(Num2 *buffer, unsigned long bufLen, const unsigned *fixedIndices, const unsigned *fixedIndexValues, unsigned nFixedIndices) const Definition: ArrayND.hh:793
bool operator==(const ArrayND< Numeric, Len2, Dim2 > &) const
ArrayND(const ArrayND< Num2, Len2, Dim2 > &from, const ArrayRange &fromRange, Functor f)
Numeric & linearValue(unsigned long index)
ArrayND operator/(const Num2 &r) const
Numeric & valueAt(const unsigned *index, unsigned indexLen)
unsigned makeCopulaSteps(double tolerance, unsigned maxIterations)
ArrayND(const ArrayShape &shape)
Num2 cdfValue(const unsigned *index, unsigned indexLen) const
ArrayND & reshape(const ArrayShape &newShape)
void applySlice(ArrayND< Num2, Len2, Dim2 > &slice, const unsigned *fixedIndices, unsigned nFixedIndices, Functor binaryFunct)
void coarseAverage(unsigned idim, unsigned n, ArrayND< Num2, Len2, Dim2 > *result) const
Numeric & linearValueAt(unsigned long index)
ArrayND(const ArrayND< Num1, Len1, Dim1 > &a1, const ArrayND< Num2, Len2, Dim2 > &a2)
bool isShapeKnown() const Definition: ArrayND.hh:326
void jointSliceScan(ArrayND< Num2, Len2, Dim2 > &slice, const unsigned *fixedIndices, const unsigned *fixedIndexValues, unsigned nFixedIndices, Functor binaryFunct)
const Numeric * data() const Definition: ArrayND.hh:323
void coarseSum(unsigned idim, unsigned n, ArrayND< Num2, Len2, Dim2 > *result) const
Numeric & value(const unsigned *index, unsigned indexLen)
ArrayND derivative(double scale=1.0) const
const unsigned * shapeData() const Definition: ArrayND.hh:335
ArrayND & linearFill(const double *coeff, unsigned coeffLen, double c)
ArrayND operator*(const Num2 &r) const
unsigned span(unsigned dim) const
void exportSlice(ArrayND< Num2, Len2, Dim2 > *slice, const unsigned *fixedIndices, const unsigned *fixedIndexValues, unsigned nFixedIndices) const Definition: ArrayND.hh:777
ArrayND contract(unsigned pos1, unsigned pos2) const
void multiMirror(ArrayND< Num2, Len2, Dim2 > *out) const
ArrayND cdfArray(double scale=1.0) const
void importSubrange(const unsigned *fromCorner, unsigned lenCorner, const ArrayND< Num2, Len2, Dim2 > &from)
ArrayND marginalize(const ArrayND< Num2, Len2, Dim2 > &prior, const unsigned *indexMap, unsigned mapLen) const
Numeric interpolate1(const double *x, unsigned xDim) const
ArrayND & operator=(const ArrayND &)
void importSlice(const ArrayND< Num2, Len2, Dim2 > &slice, const unsigned *fixedIndices, const unsigned *fixedIndexValues, unsigned nFixedIndices) Definition: ArrayND.hh:805
void jointSubrangeScan(ArrayND< Num2, Len2, Dim2 > &other, const unsigned *thisCorner, const unsigned *range, const unsigned *otherCorner, unsigned arrLen, Functor binaryFunct)
unsigned maximumSpan() const
ArrayShape sliceShape(const unsigned *fixedIndices, unsigned nFixedIndices) const
gs::ClassId classId() const Definition: ArrayND.hh:1125
bool operator!=(const ArrayND< Numeric, Len2, Dim2 > &) const
Definition: AbsArrayProjector.hh:14
std::vector< unsigned > ArrayShape Definition: ArrayShape.hh:21
bool arrayIsNonNegative(const Arr &arr)
bool arrayIsDensity(const Arr &arr)
ArrayShape arrayArgmin(const Arr &arr)
ArrayND< Numeric > externalMemArrayND(Numeric *data, const unsigned *shape, unsigned dim)
Arr::value_type arrayMax(const Arr &arr)
ArrayShape arrayArgmax(const Arr &arr)
Arr::value_type arrayMin(const Arr &arr)
std::pair< typename Arr::value_type, typename Arr::value_type > arrayMinMax(const Arr &arr)
Definition: AbsArrayProjector.hh:21
Definition: AbsVisitor.hh:20
Definition: ArrayRange.hh:24
Definition: LongerType.hh:32
Definition: SimpleFunctors.hh:664
Definition: SimpleFunctors.hh:748
Definition: SimpleFunctors.hh:756
|