@@ -150,6 +150,33 @@ void dpnp_cov_c(void* array1_in, void* result1, size_t nrows, size_t ncols)
150150 return ;
151151}
152152
153+ template <typename _DataType_input, typename _DataType_output>
154+ void dpnp_count_nonzero_c (void * array1_in, void * result1_out, size_t size)
155+ {
156+ if (array1_in == nullptr )
157+ {
158+ return ;
159+ }
160+
161+ DPNPC_ptr_adapter<_DataType_input> input1_ptr (array1_in, size, true );
162+ DPNPC_ptr_adapter<_DataType_output> result_ptr (result1_out, 1 , true , true );
163+ _DataType_input* array1 = input1_ptr.get_ptr ();
164+ _DataType_output* result1 = result_ptr.get_ptr ();
165+
166+
167+ result1[0 ] = 0 ;
168+
169+ for (size_t i = 0 ; i < size; ++i)
170+ {
171+ if (array1[i] != 0 )
172+ {
173+ result1[0 ] += 1 ;
174+ }
175+ }
176+
177+ return ;
178+ }
179+
153180template <typename _DataType>
154181class dpnp_max_c_kernel ;
155182
@@ -731,6 +758,11 @@ void func_map_init_statistics(func_map_t& fmap)
731758 fmap[DPNPFuncName::DPNP_FN_CORRELATE][eft_DBL][eft_DBL] = {eft_DBL,
732759 (void *)dpnp_correlate_c<double , double , double >};
733760
761+ fmap[DPNPFuncName::DPNP_FN_COUNT_NONZERO][eft_INT][eft_INT] = {eft_LNG, (void *)dpnp_count_nonzero_c<int , long >};
762+ fmap[DPNPFuncName::DPNP_FN_COUNT_NONZERO][eft_LNG][eft_LNG] = {eft_LNG, (void *)dpnp_count_nonzero_c<long , long >};
763+ fmap[DPNPFuncName::DPNP_FN_COUNT_NONZERO][eft_FLT][eft_FLT] = {eft_LNG, (void *)dpnp_count_nonzero_c<float , long >};
764+ fmap[DPNPFuncName::DPNP_FN_COUNT_NONZERO][eft_DBL][eft_DBL] = {eft_LNG, (void *)dpnp_count_nonzero_c<double , long >};
765+
734766 fmap[DPNPFuncName::DPNP_FN_COV][eft_INT][eft_INT] = {eft_DBL, (void *)dpnp_cov_c<double >};
735767 fmap[DPNPFuncName::DPNP_FN_COV][eft_LNG][eft_LNG] = {eft_DBL, (void *)dpnp_cov_c<double >};
736768 fmap[DPNPFuncName::DPNP_FN_COV][eft_FLT][eft_FLT] = {eft_DBL, (void *)dpnp_cov_c<double >};
0 commit comments