NumCpp  2.14.0
A Templatized Header Only C++ Implementation of the Python NumPy Library
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
roll.hpp
Go to the documentation of this file.
1
28#pragma once
29
30#include <cmath>
31
33#include "NumCpp/Core/Shape.hpp"
34#include "NumCpp/Core/Types.hpp"
35#include "NumCpp/NdArray.hpp"
36
37namespace nc
38{
39 //============================================================================
40 // Method Description:
51 template<typename dtype>
53 {
54 switch (inAxis)
55 {
56 case Axis::NONE:
57 {
58 uint32 shift = std::abs(inShift) % inArray.size();
59 if (inShift > 0)
60 {
61 shift = inArray.size() - shift;
62 }
63
66
67 return returnArray;
68 }
69 case Axis::COL:
70 {
71 const Shape inShape = inArray.shape();
72
73 uint32 shift = std::abs(inShift) % inShape.cols;
74 if (inShift > 0)
75 {
76 shift = inShape.cols - shift;
77 }
78
80 for (uint32 row = 0; row < inShape.rows; ++row)
81 {
83 returnArray.begin(row) + shift,
84 returnArray.end(row));
85 }
86
87 return returnArray;
88 }
89 case Axis::ROW:
90 {
91 return roll(inArray.transpose(), inShift, Axis::COL).transpose();
92 }
93 default:
94 {
95 THROW_INVALID_ARGUMENT_ERROR("Unimplemented axis type.");
96 return {}; // get rid of compiler warning
97 }
98 }
99 }
100} // namespace nc
#define THROW_INVALID_ARGUMENT_ERROR(msg)
Definition Error.hpp:37
Holds 1D and 2D arrays, the main work horse of the NumCpp library.
Definition NdArrayCore.hpp:139
size_type size() const noexcept
Definition NdArrayCore.hpp:4600
A Shape Class for NdArrays.
Definition Core/shape.hpp:41
uint32 cols
Definition Core/shape.hpp:45
void rotate(ForwardIt first, ForwardIt firstN, ForwardIt last) noexcept
Definition StlAlgorithms.hpp:507
Definition Cartesian.hpp:40
Axis
Enum To describe an axis.
Definition Enums.hpp:36
NdArray< dtype > arange(dtype inStart, dtype inStop, dtype inStep=1)
Definition arange.hpp:59
std::int32_t int32
Definition Types.hpp:36
NdArray< dtype > roll(const NdArray< dtype > &inArray, int32 inShift, Axis inAxis=Axis::NONE)
Definition roll.hpp:52
std::uint32_t uint32
Definition Types.hpp:40