NumCpp  2.13.0
A Templatized Header Only C++ Implementation of the Python NumPy Library
Loading...
Searching...
No Matches
count_nonzero.hpp
Go to the documentation of this file.
1
28#pragma once
29
32#include "NumCpp/Core/Shape.hpp"
33#include "NumCpp/Core/Types.hpp"
34#include "NumCpp/NdArray.hpp"
35
36namespace nc
37{
38 //============================================================================
39 // Method Description:
48 template<typename dtype>
50 {
52
53 switch (inAxis)
54 {
55 case Axis::NONE:
56 {
57 NdArray<uint32> count = { inArray.size() -
58 static_cast<uint32>(
59 stl_algorithms::count(inArray.cbegin(), inArray.cend(), dtype{ 0 })) };
60 return count;
61 }
62 case Axis::COL:
63 {
64 Shape inShape = inArray.shape();
65
67 for (uint32 row = 0; row < inShape.rows; ++row)
68 {
69 returnArray(0, row) =
70 inShape.cols -
71 static_cast<uint32>(stl_algorithms::count(inArray.cbegin(row), inArray.cend(row), dtype{ 0 }));
72 }
73
74 return returnArray;
75 }
76 case Axis::ROW:
77 {
78 return count_nonzero(inArray.transpose(), Axis::COL);
79 }
80 default:
81 {
82 THROW_INVALID_ARGUMENT_ERROR("Unimplemented axis type.");
83 return {}; // get rid of compiler warning
84 }
85 }
86 }
87} // namespace nc
#define THROW_INVALID_ARGUMENT_ERROR(msg)
Definition Error.hpp:37
#define STATIC_ASSERT_ARITHMETIC_OR_COMPLEX(dtype)
Definition StaticAsserts.hpp:56
Holds 1D and 2D arrays, the main work horse of the NumCpp library.
Definition NdArrayCore.hpp:139
A Shape Class for NdArrays.
Definition Core/shape.hpp:41
std::iterator_traits< InputIt >::difference_type count(InputIt first, InputIt last, const T &value) noexcept
Definition StlAlgorithms.hpp:119
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
NdArray< uint32 > count_nonzero(const NdArray< dtype > &inArray, Axis inAxis=Axis::NONE)
Definition count_nonzero.hpp:49
std::uint32_t uint32
Definition Types.hpp:40