Matrix-Vector Operations#
Arithmetic#
#include <raft/linalg/matrix_vector.cuh>
namespace raft::linalg
-
template<typename math_t, typename idx_t, typename layout_t>
void binary_mult_skip_zero(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout_t> data, raft::device_vector_view<const math_t, idx_t> vec, Apply apply)# multiply each row or column of matrix with vector, skipping zeros in vector
- Parameters:
handle – [in] raft handle for managing library resources
data – [inout] input matrix, results are in-place
vec – [in] input vector
apply – [in] whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply
-
template<typename math_t, typename idx_t, typename layout_t>
void binary_div(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout_t> data, raft::device_vector_view<const math_t, idx_t> vec, Apply apply)# divide each row or column of matrix with vector
- Parameters:
handle – [in] raft handle for managing library resources
data – [inout] input matrix, results are in-place
vec – [in] input vector
apply – [in] whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply
-
template<typename math_t, typename idx_t, typename layout_t>
void binary_div_skip_zero(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout_t> data, raft::device_vector_view<const math_t, idx_t> vec, Apply apply, bool return_zero = false)# divide each row or column of matrix with vector, skipping zeros in vector
- Parameters:
handle – [in] raft handle for managing library resources
data – [inout] input matrix, results are in-place
vec – [in] input vector
apply – [in] whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply
return_zero – [in] result is zero if true and vector value is below threshold, original value if false
-
template<typename math_t, typename idx_t, typename layout_t>
void binary_add(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout_t> data, raft::device_vector_view<const math_t, idx_t> vec, Apply apply)# add each row or column of matrix with vector
- Parameters:
handle – [in] raft handle for managing library resources
data – [inout] input matrix, results are in-place
vec – [in] input vector
apply – [in] whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply
-
template<typename math_t, typename idx_t, typename layout_t>
void binary_sub(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout_t> data, raft::device_vector_view<const math_t, idx_t> vec, Apply apply)# subtract each row or column of matrix with vector
- Parameters:
handle – [in] raft handle for managing library resources
data – [inout] input matrix, results are in-place
vec – [in] input vector
apply – [in] whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply
Operations#
#include <raft/linalg/matrix_vector_op.cuh>
namespace raft::linalg
-
template<typename MatValueType, typename VecValueType, typename LayoutPolicy, typename Lambda, typename IndexType>
void matrix_vector_op(raft::resources const &handle, raft::device_matrix_view<const MatValueType, IndexType, LayoutPolicy> matrix, raft::device_vector_view<const VecValueType, IndexType> vec, raft::device_matrix_view<MatValueType, IndexType, LayoutPolicy> out, Apply apply, Lambda op)# Operations for all the columns or rows with a given vector. Caution : Threads process multiple elements to speed up processing. These are loaded in a single read thanks to type promotion. Faster processing would thus only be enabled when addresses are optimally aligned for it. Note : the function will also check that the size of the window of accesses is a multiple of the number of elements processed by a thread in order to enable faster processing.
- Template Parameters:
MatValueType – the data-type of the input matrix
VecValueType – the data-type of the input vector
LayoutPolicy – the layout of input and output (raft::row_major or raft::col_major)
Lambda – a device function which represents a binary operator
IndexType – Integer used for addressing
- Parameters:
handle – [in] raft::resources
matrix – [in] input raft::matrix_view
vec – [in] vector raft::vector_view
out – [out] output raft::matrix_view
apply – [in] whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply
op – [in] the mathematical operation
-
template<typename MatValueType, typename Vec1ValueType, typename Vec2ValueType, typename LayoutPolicy, typename Lambda, typename IndexType>
void matrix_vector_op(raft::resources const &handle, raft::device_matrix_view<const MatValueType, IndexType, LayoutPolicy> matrix, raft::device_vector_view<const Vec1ValueType, IndexType> vec1, raft::device_vector_view<const Vec2ValueType, IndexType> vec2, raft::device_matrix_view<MatValueType, IndexType, LayoutPolicy> out, Apply apply, Lambda op)# Operations for all the columns or rows with the given vectors. Caution : Threads process multiple elements to speed up processing. These are loaded in a single read thanks to type promotion. Faster processing would thus only be enabled when addresses are optimally aligned for it. Note : the function will also check that the size of the window of accesses is a multiple of the number of elements processed by a thread in order to enable faster processing.
- Template Parameters:
MatValueType – the data-type of the input and output matrices
Vec1ValueType – the data-type of the first input vector
Vec2ValueType – the data-type of the second input vector
LayoutPolicy – the layout of input and output (raft::row_major or raft::col_major)
Lambda – a device function which represents a binary operator
IndexType – Integer used for addressing
- Parameters:
handle – raft::resources
matrix – input raft::matrix_view
vec1 – the first vector raft::vector_view
vec2 – the second vector raft::vector_view
out – output raft::matrix_view
apply – whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply
op – the mathematical operation