types::ndarray<typename types::numpy_type<dtype>::type, 2> eye(long N, long M=-1, long k=0, dtype d=dtype()) { if(M<0) M = N; types::ndarray<typename types::numpy_type<dtype>::type, 2> out = zeros(types::make_tuple(N, M), d); if(k>=0) for(int i=0, j = k; i< N and j < M; ++i, ++j) out[i][j] = typename types::numpy_type<dtype>::type(1); else for(int i=-k, j = 0; i< N and j < M; ++i, ++j) out[i][j] = typename types::numpy_type<dtype>::type(1); return out; }
types::ndarray<dtype, 1> empty(long size, dtype d=dtype()) { return empty(types::make_tuple(size), d); }
types::ndarray<typename types::numpy_type<dtype>::type, 1> arange(T begin, U end, S step=S(1), dtype d=dtype()) { typedef typename types::numpy_type<dtype>::type R; size_t size = std::max(R(0), R(std::ceil((end - begin)/step))); types::ndarray<R, 1> a(types::make_tuple((long)size), __builtin__::None); if(size) { auto prev = a.fbegin(), end = a.fend(); *prev = begin; for(auto iter = prev + 1; iter!=end; ++iter) { *iter = *prev + step; prev = iter; } } return a; }
types::ndarray<typename types::numpy_type<dtype>::type, N> empty(types::array<long, N>const& shape, dtype d=dtype()) { return types::ndarray<typename types::numpy_type<dtype>::type, N>(shape, __builtin__::None); }