18 std::vector<uint32_t> coordinates;
20 for (std::size_t i = shape.size() - 1; i < shape.size(); --i)
24 coordinates.insert(coordinates.begin(), index % shape[i]);
26 index = index/shape[i];
37 for (uint32_t i = rank; i > 0; --i)
39 index = index + coordinates[i - 1] * base;
40 base = base * shape[i - 1];
45 template<
typename I,
typename O>
56 std::vector<uint32_t> outputShape(rank);
57 for (uint32_t i = 0; i < rank; ++i)
59 outputShape[i] = inputShape[i] * params.
m_Multiples[i];
68 auto inputValue = inputDecoder.
Get();
70 outputEncoder.
Set(inputValue);
77 std::vector<float> outputData;
78 auto outputNumElements = inputData.size() *
static_cast<uint32_t
>(std::accumulate(begin(params.
m_Multiples),
81 std::multiplies<>()));
82 outputData.reserve(outputNumElements);
84 for (uint32_t outputIndex = 0; outputIndex < outputNumElements; ++outputIndex)
89 std::vector<uint32_t> inputCoordinates;
90 inputCoordinates.reserve(rank);
91 for (uint32_t i = 0; i < rank; ++i)
93 inputCoordinates.push_back(outputCoords[i] % inputShape[i]);
98 outputEncoder[outputIndex];
99 outputEncoder.
Set(inputData[inputIndex]);
virtual std::vector< float > DecodeTensor(const TensorShape &tensorShape, bool isDepthwise=false)=0
virtual IType Get() const =0
virtual void Set(IType right)=0
unsigned int GetNumDimensions() const
unsigned int GetNumElements() const
const TensorShape & GetShape() const
unsigned int GetNumDimensions() const
Function that returns the tensor rank.
Copyright (c) 2021 ARM Limited and Contributors.
std::vector< uint32_t > IndexToCoordinates(std::vector< uint32_t > &shape, uint32_t index)
uint32_t CoordinatesToIndex(TensorShape &shape, std::vector< uint32_t > &coordinates)
void Tile(const TileDescriptor ¶ms, const TensorInfo &inputInfo, Decoder< I > &inputDecoder, Encoder< O > &outputEncoder)
std::vector< uint32_t > m_Multiples
The vector to multiply the input shape by.