Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. #include <boost/python.hpp>
  4. #include <boost/python/numpy.hpp>
  5.  
  6. namespace py = boost::python;
  7. namespace np = py::numpy;
  8.  
  9. template<typename T, std::size_t ...I>
  10. auto make_shape_impl(const T &data, std::index_sequence<I...> ndxs)
  11. {
  12. return std::array<std::size_t, ndxs.size()> { std::get<I+1>(data)... };
  13. }
  14.  
  15. template<typename T>
  16. auto make_shape(const T &data)
  17. {
  18. return make_shape_impl(data, std::make_index_sequence<std::tuple_size_v<T> - 1>());
  19. }
  20.  
  21. template<typename T, std::size_t ...I>
  22. auto make_strides_impl(const T &data, std::index_sequence<I...> ndxs)
  23. {
  24.  
  25. }
  26.  
  27. template<typename T>
  28. auto make_strides(const T &data)
  29. {
  30. return make_strides_impl(data, std::make_index_sequence<std::tuple_size_v<T> - 1>());
  31. }
  32.  
  33. template<typename T>
  34. np::ndarray make_ndarray(const T &data)
  35. {
  36. auto shape = make_shape(data);
  37. auto strides = shape;
  38.  
  39. std::reverse(strides.begin(), strides.end());
  40.  
  41. for(auto v : strides)
  42. std::cout << v << std::endl;
  43.  
  44. auto dtype = np::dtype::get_builtin<std::remove_pointer_t<std::tuple_element_t<0, T>>>();
  45.  
  46. return np::from_data(std::get<0>(data), dtype, shape, strides, py::object());
  47. }
  48.  
  49. int main()
  50. {
  51. Py_Initialize();
  52. np::initialize();
  53.  
  54. std::tuple<float*, std::size_t, std::size_t, std::size_t> data { new float[3 * 2 * 1], 3, 2, 1 };
  55.  
  56. std::get<0>(data)[0] = -1.0f;
  57.  
  58. np::ndarray py_array = make_ndarray(data);
  59.  
  60. std::cout << py::extract<std::string>(py::str(py_array))() << std::endl;
  61.  
  62. return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement