I would like to know if it is possible to use memcpy to copy a float array to a particular dimension of a multi_array.
ex.:
I declare a 3 dimension multi_array of floats
typedef boost::multi_array < float, 3 > array_type3D_f_t;
int dim1 = 2;
int dim2 = 2;
int dim3 = 4;
array_type3D_f_t valueMatrix(boost::extents[dim1][dim2][dim3]);
then for each 3rd dimension I would like to copy a float array into it using memcpy
(the final real multi_array will contain approx 21 000 000 elements, and thts why I do wish to iterate ).
for (int i = 0; i < dim3; ++i) { // iterate over each 3rd dimension of the multi_array
float *arr = NULL;
arr = (float*)malloc(sizeof(float) * dim1 * dim2);
function(&arr) // fills in the array (2D contiguous (dim1 * dim2))
memcpy(&valueMatrix[something...], arr, sizeof(float) * dim1 * dim2) // I want to copy the vector into the multi_array's 3rd dimension
}
then when I want to access an element I simply do
valueMatrix[1][1][1];
what i used to do is
int level = 0;
while(it1 != it2){ // it1 and it2 are iterators to a list of records holding the data
float* arr;
readData(it1, &arr); // read the data into the array
for (int j = 0; j < dim2; ++j){
for (int i = 0; i < dim1; ++i){
valueMatrix[i][j][level] = datavec[ j * dim1+i ];
}
}
++it1;
// change level
++level;
}
I would like to replace the nested loops by a memcpy, is this possible?
--Sébastien Fortier
_______________________________________________Boost-users mailing list