NumCpp  2.12.1
A Templatized Header Only C++ Implementation of the Python NumPy Library
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
66 NdArray<uint32> returnArray(1, inShape.rows);
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
size_type size() const noexcept
Definition: NdArrayCore.hpp:4524
const_iterator cbegin() const noexcept
Definition: NdArrayCore.hpp:1365
self_type transpose() const
Definition: NdArrayCore.hpp:4882
const Shape & shape() const noexcept
Definition: NdArrayCore.hpp:4511
const_iterator cend() const noexcept
Definition: NdArrayCore.hpp:1673
A Shape Class for NdArrays.
Definition: Core/Shape.hpp:41
uint32 rows
Definition: Core/Shape.hpp:44
uint32 cols
Definition: Core/Shape.hpp:45
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< uint32 > count_nonzero(const NdArray< dtype > &inArray, Axis inAxis=Axis::NONE)
Definition: count_nonzero.hpp:49
std::uint32_t uint32
Definition: Types.hpp:40