dpilger26 / NumCpp

C++ implementation of the Python Numpy library
https://dpilger26.github.io/NumCpp
MIT License
3.51k stars 548 forks source link

nc.reshape not support 3-dimension array, can you add an overloading function? #201

Closed Robinsci closed 5 months ago

Robinsci commented 1 year ago

nc.reshape not support 3-dimension array, can you add an overloading function?

PhilipDeegan commented 6 months ago

to me, it appears this library is not really setup for 3d, and that you might be expected to slice your 3d data into 2d slices to

the following appears to work for future reference


#include "NumCpp.hpp"

#include <array>
#include <vector>
#include <cstdlib>
#include <iostream>

struct Slicer{

  template<typename Op>
  void slicer_2d(std::vector<double> &ds, Op& fn, std::size_t from){
    nc::NdArray<double> ar{ds.data() + from, dims[0], dims[1], nc::PointerPolicy::SHELL};
    fn(ar);
  }

  template<typename Op>
  void operator()(std::vector<double> & ds, Op fn){
    auto slice = dims[0] * dims[1];
    for(std::size_t k = 0; k < dims[2]; ++k){
      slicer_2d(ds, fn, k * slice);
    }
  }

  std::array<std::size_t, 3> dims;
};

int main(){
  std::vector<double> ds(27);
  for(std::size_t i = 0; i < ds.size(); ++i) ds[i] = i;

  Slicer{3,3,3}(ds, [](auto& ar){
      std::cout << ar << std::endl;
  });

  return 0;
}
dpilger26 commented 5 months ago

This has been asked and answered many times... No it doesn't, please see the documentation.