diff options
Diffstat (limited to 'utils/Utils.h')
-rw-r--r-- | utils/Utils.h | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/utils/Utils.h b/utils/Utils.h index ba10d7c803..cc5dfbabc2 100644 --- a/utils/Utils.h +++ b/utils/Utils.h @@ -616,10 +616,10 @@ void save_to_ppm(T &tensor, const std::string &ppm_filename) * @param[in] npy_filename Filename of the file to create. * @param[in] fortran_order If true, save matrix in fortran order. */ -template <typename T> +template <typename T, typename U = float> void save_to_npy(T &tensor, const std::string &npy_filename, bool fortran_order) { - ARM_COMPUTE_ERROR_ON_DATA_TYPE_NOT_IN(&tensor, arm_compute::DataType::F32); + ARM_COMPUTE_ERROR_ON_DATA_TYPE_NOT_IN(&tensor, arm_compute::DataType::F32, arm_compute::DataType::QASYMM8); std::ofstream fs; try @@ -637,33 +637,25 @@ void save_to_npy(T &tensor, const std::string &npy_filename, bool fortran_order) // Map buffer if creating a CLTensor map(tensor, true); - switch(tensor.info()->data_type()) - { - case arm_compute::DataType::F32: - { - std::vector<float> tmp; /* Used only to get the typestring */ - npy::Typestring typestring_o{ tmp }; - std::string typestring = typestring_o.str(); + using typestring_type = typename std::conditional<std::is_floating_point<U>::value, float, qasymm8_t>::type; - std::ofstream stream(npy_filename, std::ofstream::binary); - npy::write_header(stream, typestring, fortran_order, shape); + std::vector<typestring_type> tmp; /* Used only to get the typestring */ + npy::Typestring typestring_o{ tmp }; + std::string typestring = typestring_o.str(); - arm_compute::Window window; - window.use_tensor_dimensions(tensor.info()->tensor_shape()); + std::ofstream stream(npy_filename, std::ofstream::binary); + npy::write_header(stream, typestring, fortran_order, shape); - arm_compute::Iterator in(&tensor, window); + arm_compute::Window window; + window.use_tensor_dimensions(tensor.info()->tensor_shape()); - arm_compute::execute_window_loop(window, [&](const arm_compute::Coordinates & id) - { - stream.write(reinterpret_cast<const char *>(in.ptr()), sizeof(float)); - }, - in); + arm_compute::Iterator in(&tensor, window); - break; - } - default: - ARM_COMPUTE_ERROR("Unsupported format"); - } + arm_compute::execute_window_loop(window, [&](const arm_compute::Coordinates & id) + { + stream.write(reinterpret_cast<const char *>(in.ptr()), sizeof(typestring_type)); + }, + in); // Unmap buffer if creating a CLTensor unmap(tensor); |