ipa: libipa: vector: Add matrix-vector multiplication

Add an operation for multiplying a matrix with a vector.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Paul Elder 2024-06-14 21:02:11 +09:00 committed by Laurent Pinchart
parent cbfdfa42ca
commit 01a33fedf6
2 changed files with 28 additions and 0 deletions

View file

@ -123,6 +123,17 @@ namespace ipa {
* \return The length of the vector * \return The length of the vector
*/ */
/**
* \fn Vector<T, Rows> operator*(const Matrix<T, Rows, Cols> &m, const Vector<T, Cols> &v)
* \brief Multiply a matrix by a vector
* \tparam T Numerical type of the contents of the matrix and vector
* \tparam Rows The number of rows in the matrix
* \tparam Cols The number of columns in the matrix (= rows in the vector)
* \param m The matrix
* \param v The vector
* \return Product of matrix \a m and vector \a v
*/
/** /**
* \fn bool operator==(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs) * \fn bool operator==(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
* \brief Compare vectors for equality * \brief Compare vectors for equality

View file

@ -16,6 +16,8 @@
#include "libcamera/internal/yaml_parser.h" #include "libcamera/internal/yaml_parser.h"
#include "matrix.h"
namespace libcamera { namespace libcamera {
LOG_DECLARE_CATEGORY(Vector) LOG_DECLARE_CATEGORY(Vector)
@ -140,6 +142,21 @@ private:
std::array<T, Rows> data_; std::array<T, Rows> data_;
}; };
template<typename T, unsigned int Rows, unsigned int Cols>
Vector<T, Rows> operator*(const Matrix<T, Rows, Cols> &m, const Vector<T, Cols> &v)
{
Vector<T, Rows> result;
for (unsigned int i = 0; i < Rows; i++) {
T sum = 0;
for (unsigned int j = 0; j < Cols; j++)
sum += m[i][j] * v[j];
result[i] = sum;
}
return result;
}
template<typename T, unsigned int Rows> template<typename T, unsigned int Rows>
bool operator==(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs) bool operator==(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
{ {