1182 |
|
|
1183 |
/** |
/** |
1184 |
\brief |
\brief |
1185 |
swaps the components axis_offset and axis_offset+1 |
swaps the components axis0 and axis1. |
1186 |
|
|
1187 |
\param in - Input - matrix |
\param in - Input - matrix |
1188 |
\param inOffset - Input - offset into in |
\param inOffset - Input - offset into in |
1189 |
\param ev - Output - The nonsymmetric matrix |
\param ev - Output - The nonsymmetric matrix |
1190 |
\param inOffset - Input - offset into ev |
\param inOffset - Input - offset into ev |
1191 |
|
\param axis0 - axis index |
1192 |
|
\param axis1 - axis index |
1193 |
*/ |
*/ |
1194 |
ESCRIPT_DLL_API |
ESCRIPT_DLL_API |
1195 |
static |
static |
1196 |
inline |
inline |
1197 |
void |
void |
1198 |
swap(DataArrayView& in, |
swapaxes(DataArrayView& in, |
1199 |
ValueType::size_type inOffset, |
ValueType::size_type inOffset, |
1200 |
DataArrayView& ev, |
DataArrayView& ev, |
1201 |
ValueType::size_type evOffset, |
ValueType::size_type evOffset, |
1202 |
int axis_offset) |
int axis0, int axis1) |
1203 |
{ |
{ |
1204 |
if (in.getRank() == 4) { |
if (in.getRank() == 4) { |
1205 |
int s0=ev.getShape()[0]; |
int s0=ev.getShape()[0]; |
1207 |
int s2=ev.getShape()[2]; |
int s2=ev.getShape()[2]; |
1208 |
int s3=ev.getShape()[3]; |
int s3=ev.getShape()[3]; |
1209 |
int i0, i1, i2, i3; |
int i0, i1, i2, i3; |
1210 |
if (axis_offset==0) { |
if (axis0==0) { |
1211 |
for (i0=0; i0<s0; i0++) { |
if (axis1==1) { |
1212 |
for (i1=0; i1<s1; i1++) { |
for (i0=0; i0<s0; i0++) { |
1213 |
for (i2=0; i2<s2; i2++) { |
for (i1=0; i1<s1; i1++) { |
1214 |
for (i3=0; i3<s3; i3++) { |
for (i2=0; i2<s2; i2++) { |
1215 |
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i1,i0,i2,i3)]; |
for (i3=0; i3<s3; i3++) { |
1216 |
|
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i1,i0,i2,i3)]; |
1217 |
|
} |
1218 |
|
} |
1219 |
|
} |
1220 |
|
} |
1221 |
|
} else if (axis1==2) { |
1222 |
|
for (i0=0; i0<s0; i0++) { |
1223 |
|
for (i1=0; i1<s1; i1++) { |
1224 |
|
for (i2=0; i2<s2; i2++) { |
1225 |
|
for (i3=0; i3<s3; i3++) { |
1226 |
|
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i2,i1,i0,i3)]; |
1227 |
|
} |
1228 |
|
} |
1229 |
|
} |
1230 |
|
} |
1231 |
|
|
1232 |
|
} else if (axis1==3) { |
1233 |
|
for (i0=0; i0<s0; i0++) { |
1234 |
|
for (i1=0; i1<s1; i1++) { |
1235 |
|
for (i2=0; i2<s2; i2++) { |
1236 |
|
for (i3=0; i3<s3; i3++) { |
1237 |
|
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i3,i1,i2,i0)]; |
1238 |
|
} |
1239 |
|
} |
1240 |
|
} |
1241 |
|
} |
1242 |
|
} |
1243 |
|
} else if (axis0==1) { |
1244 |
|
if (axis1==2) { |
1245 |
|
for (i0=0; i0<s0; i0++) { |
1246 |
|
for (i1=0; i1<s1; i1++) { |
1247 |
|
for (i2=0; i2<s2; i2++) { |
1248 |
|
for (i3=0; i3<s3; i3++) { |
1249 |
|
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i0,i2,i1,i3)]; |
1250 |
|
} |
1251 |
|
} |
1252 |
|
} |
1253 |
|
} |
1254 |
|
} else if (axis1==3) { |
1255 |
|
for (i0=0; i0<s0; i0++) { |
1256 |
|
for (i1=0; i1<s1; i1++) { |
1257 |
|
for (i2=0; i2<s2; i2++) { |
1258 |
|
for (i3=0; i3<s3; i3++) { |
1259 |
|
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i0,i3,i2,i1)]; |
1260 |
|
} |
1261 |
|
} |
1262 |
|
} |
1263 |
|
} |
1264 |
|
} |
1265 |
|
} else if (axis0==2) { |
1266 |
|
if (axis1==3) { |
1267 |
|
for (i0=0; i0<s0; i0++) { |
1268 |
|
for (i1=0; i1<s1; i1++) { |
1269 |
|
for (i2=0; i2<s2; i2++) { |
1270 |
|
for (i3=0; i3<s3; i3++) { |
1271 |
|
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i0,i1,i3,i2)]; |
1272 |
|
} |
1273 |
|
} |
1274 |
|
} |
1275 |
|
} |
1276 |
|
} |
1277 |
|
} |
1278 |
|
|
1279 |
|
} else if ( in.getRank() == 3) { |
1280 |
|
int s0=ev.getShape()[0]; |
1281 |
|
int s1=ev.getShape()[1]; |
1282 |
|
int s2=ev.getShape()[2]; |
1283 |
|
int i0, i1, i2; |
1284 |
|
if (axis0==0) { |
1285 |
|
if (axis1==1) { |
1286 |
|
for (i0=0; i0<s0; i0++) { |
1287 |
|
for (i1=0; i1<s1; i1++) { |
1288 |
|
for (i2=0; i2<s2; i2++) { |
1289 |
|
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2)] = (*(in.m_data))[inOffset+in.index(i1,i0,i2)]; |
1290 |
|
} |
1291 |
} |
} |
1292 |
} |
} |
1293 |
} |
} else if (axis1==2) { |
1294 |
} |
for (i0=0; i0<s0; i0++) { |
1295 |
} |
for (i1=0; i1<s1; i1++) { |
1296 |
else if (axis_offset==1) { |
for (i2=0; i2<s2; i2++) { |
1297 |
for (i0=0; i0<s0; i0++) { |
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2)] = (*(in.m_data))[inOffset+in.index(i2,i1,i0)]; |
1298 |
for (i1=0; i1<s1; i1++) { |
} |
|
for (i2=0; i2<s2; i2++) { |
|
|
for (i3=0; i3<s3; i3++) { |
|
|
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i0,i2,i1,i3)]; |
|
1299 |
} |
} |
1300 |
} |
} |
|
} |
|
1301 |
} |
} |
1302 |
} |
} else if (axis0==1) { |
1303 |
else { |
if (axis1==2) { |
1304 |
for (i0=0; i0<s0; i0++) { |
for (i0=0; i0<s0; i0++) { |
1305 |
for (i1=0; i1<s1; i1++) { |
for (i1=0; i1<s1; i1++) { |
1306 |
for (i2=0; i2<s2; i2++) { |
for (i2=0; i2<s2; i2++) { |
1307 |
for (i3=0; i3<s3; i3++) { |
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2)] = (*(in.m_data))[inOffset+in.index(i0,i2,i1)]; |
1308 |
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2,i3)] = (*(in.m_data))[inOffset+in.index(i0,i1,i3,i2)]; |
} |
1309 |
} |
} |
1310 |
} |
} |
1311 |
} |
} |
|
} |
|
1312 |
} |
} |
1313 |
} |
} else if ( in.getRank() == 2) { |
|
else if (in.getRank() == 3) { |
|
1314 |
int s0=ev.getShape()[0]; |
int s0=ev.getShape()[0]; |
1315 |
int s1=ev.getShape()[1]; |
int s1=ev.getShape()[1]; |
|
int s2=ev.getShape()[2]; |
|
1316 |
int i0, i1, i2; |
int i0, i1, i2; |
1317 |
if (axis_offset==0) { |
if (axis0==0) { |
1318 |
for (i0=0; i0<s0; i0++) { |
if (axis1==1) { |
1319 |
for (i1=0; i1<s1; i1++) { |
for (i0=0; i0<s0; i0++) { |
1320 |
for (i2=0; i2<s2; i2++) { |
for (i1=0; i1<s1; i1++) { |
1321 |
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2)] = (*(in.m_data))[inOffset+in.index(i1,i0,i2)]; |
(*(ev.m_data))[evOffset+ev.index(i0,i1)] = (*(in.m_data))[inOffset+in.index(i1,i0)]; |
1322 |
} |
} |
|
} |
|
|
} |
|
|
} |
|
|
else { |
|
|
for (i0=0; i0<s0; i0++) { |
|
|
for (i1=0; i1<s1; i1++) { |
|
|
for (i2=0; i2<s2; i2++) { |
|
|
(*(ev.m_data))[evOffset+ev.index(i0,i1,i2)] = (*(in.m_data))[inOffset+in.index(i0,i2,i1)]; |
|
1323 |
} |
} |
1324 |
} |
} |
1325 |
} |
} |
1326 |
} |
} else { |
1327 |
} |
throw DataException("Error - DataArrayView::swapaxes can only be calculated for rank 2, 3 or 4 objects."); |
|
else if (in.getRank() == 2) { |
|
|
int s0=ev.getShape()[0]; |
|
|
int s1=ev.getShape()[1]; |
|
|
int i0, i1; |
|
|
for (i0=0; i0<s0; i0++) { |
|
|
for (i1=0; i1<s1; i1++) { |
|
|
(*(ev.m_data))[evOffset+ev.index(i0,i1)] = (*(in.m_data))[inOffset+in.index(i1,i0)]; |
|
|
} |
|
|
} |
|
|
} |
|
|
else if (in.getRank() == 1) { |
|
|
int s0=ev.getShape()[0]; |
|
|
int i0; |
|
|
for (i0=0; i0<s0; i0++) { |
|
|
(*(ev.m_data))[evOffset+ev.index(i0)] = (*(in.m_data))[inOffset+in.index(i0)]; |
|
|
} |
|
|
} |
|
|
else if (in.getRank() == 0) { |
|
|
(*(ev.m_data))[evOffset+ev.index()] = (*(in.m_data))[inOffset+in.index()]; |
|
|
} |
|
|
else { |
|
|
throw DataException("Error - DataArrayView::transpose can only be calculated for rank 0, 1, 2, 3 or 4 objects."); |
|
|
} |
|
1328 |
} |
} |
1329 |
|
} |
1330 |
|
|
1331 |
/** |
/** |
1332 |
\brief |
\brief |