From 4dc64a69ba383ece509d442598617445a3b4847f Mon Sep 17 00:00:00 2001 From: Narumol Prangnawarat Date: Mon, 16 Sep 2019 17:00:22 +0100 Subject: IVGCVSW-3694 Add ArgMinMax implementation for Ref * Add ArgMinMax implementation * Add utility function to get number of elements between axis * Add utility function to get unsigned axis * Unit tests for ArgMinMax function Signed-off-by: Narumol Prangnawarat Change-Id: I7bc3d610dda9526190187eb87394a8ed7a4b5cdd --- src/armnnUtils/TensorUtils.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/armnnUtils/TensorUtils.cpp') diff --git a/src/armnnUtils/TensorUtils.cpp b/src/armnnUtils/TensorUtils.cpp index 8baea78ab5..b4e8d5acda 100644 --- a/src/armnnUtils/TensorUtils.cpp +++ b/src/armnnUtils/TensorUtils.cpp @@ -107,4 +107,32 @@ armnn::TensorShape ExpandDims(const armnn::TensorShape& tensorShape, int axis) return armnn::TensorShape(outputDim, outputShape.data()); } +unsigned int GetNumElementsBetween(const armnn::TensorShape& shape, + const unsigned int firstAxisInclusive, + const unsigned int lastAxisExclusive) +{ + BOOST_ASSERT(0 <= firstAxisInclusive); + BOOST_ASSERT(firstAxisInclusive <= lastAxisExclusive); + BOOST_ASSERT(lastAxisExclusive <= shape.GetNumDimensions()); + unsigned int count = 1; + for (unsigned int i = firstAxisInclusive; i < lastAxisExclusive; i++) + { + count *= shape[i]; + } + return count; +} + +unsigned int GetUnsignedAxis(const unsigned int inputDimension, const int axis) +{ + BOOST_ASSERT_MSG(axis < boost::numeric_cast(inputDimension), + "Required axis index greater than number of dimensions."); + BOOST_ASSERT_MSG(axis >= -boost::numeric_cast(inputDimension), + "Required axis index lower than negative of the number of dimensions"); + + unsigned int uAxis = axis < 0 ? + inputDimension - boost::numeric_cast(abs(axis)) + : boost::numeric_cast(axis); + return uAxis; +} + } -- cgit v1.2.1