注意

RAFT 中的向量搜索和聚类算法正在迁移到一个专门用于向量搜索的新库,名为 cuVS。在此迁移过程中,我们将继续支持 RAFT 中的向量搜索算法,但在 RAPIDS 24.06(六月)版本之后将不再更新它们。我们计划在 RAPIDS 24.10(十月)版本完成迁移,并在 24.12(十二月)版本中将其完全从 RAFT 中移除。

矩阵算术#

按行/列操作#

#include <raft/matrix/linewise_op.cuh>

namespace raft::matrix

template<typename m_t, typename idx_t, typename layout, typename Lambda, typename ...vec_t, typename = raft::enable_if_device_mdspan<vec_t...>>
void linewise_op(raft::resources const &handle, raft::device_matrix_view<const m_t, idx_t, layout> in, raft::device_matrix_view<m_t, idx_t, layout> out, const bool alongLines, Lambda op, vec_t... vecs)#

对矩阵的行或列(行或列)运行一个函数,带有可变数量的行向量或列向量。这里的术语 line 表示根据矩阵布局,行可以是列也可以是行。重要的是向量是应用于行内(向量索引对应行内索引)还是应用于行间(向量索引对应行号)。

模板参数:
  • m_t – 矩阵元素类型

  • idx_t – 用于索引的整数类型

  • layout – 矩阵数据布局(必须是行优先或列优先)

  • Lambda – 用于操作的 lambda 函数类型

  • vec_t – 可变数量的 device_vector_view 向量类型(如果沿行,大小为 m;否则大小为 n)

参数:
  • handle[in] 用于管理资源的 raft 句柄

  • out[out] 操作结果;可以与 in 相同;应与 in 对齐,以实现更快的向量化内存传输。

  • in[in] 输入矩阵,包含 nLines 行/列,每行/列长度为 lineLen

  • alongLines[in] 向量索引是沿行/列还是跨行/列。

  • op[in] 应用于每行/列的操作:对于 i 在 [0..lineLen) 和 j 在 [0..nLines): out[j, i] = op(in[j, i], vec1[i], vec2[i], … veck[i]) 如果 alongLines = true out[j, i] = op(in[j, i], vec1[j], vec2[j], … veck[j]) 如果 alongLines = false 其中矩阵索引是行优先 ([j, i] = [i + lineLen * j])。 out[i, j] = op(in[i, j], vec1[i], vec2[i], … veck[i]) 如果 alongLines = true out[i, j] = op(in[i, j], vec1[j], vec2[j], … veck[j]) 如果 alongLines = false 其中矩阵索引是列优先 ([i, j] = [i + lineLen * j])。

  • vecs[in] 零个或多个向量作为参数传递,每个向量的大小为 alongLines ? lineLen : nLines

template<typename m_t, typename idx_t, typename layout, typename Lambda, typename ...vec_t, typename = raft::enable_if_device_mdspan<vec_t...>>
void linewise_op(raft::resources const &handle, raft::device_aligned_matrix_view<const m_t, idx_t, layout> in, raft::device_aligned_matrix_view<m_t, idx_t, layout> out, const bool alongLines, Lambda op, vec_t... vecs)#

#

#include <raft/matrix/power.cuh>

namespace raft::matrix

template<typename math_t, typename idx_t, typename layout>
void power(raft::resources const &handle, raft::device_matrix_view<const math_t, idx_t, layout> in, raft::device_matrix_view<math_t, idx_t, layout> out)#

输入矩阵中每个元素的幂。

模板参数:
  • math_t – 用于矩阵元素的类型

  • idx_t – 用于索引的整数类型

  • layout – 矩阵布局(行优先或列优先)

参数:
  • handle[in] raft 句柄

  • in[in] 输入矩阵

  • out[out] 输出矩阵。结果存储在 out 矩阵中。

template<typename math_t, typename idx_t, typename layout>
void weighted_power(raft::resources const &handle, raft::device_matrix_view<const math_t, idx_t, layout> in, raft::device_matrix_view<math_t, idx_t, layout> out, math_t scalar)#

输入矩阵中每个元素的幂。

模板参数:
  • math_t – 矩阵元素类型

  • idx_t – 用于索引的整数类型

  • layout – 矩阵数据布局(必须是行优先或列优先)

参数:
  • handle[in] raft 句柄

  • in[in] 输入矩阵

  • out[out] 输出矩阵。结果存储在 out 矩阵中。

  • scalar[in] 每个元素都与标量相乘。

template<typename math_t, typename idx_t, typename layout>
void weighted_power(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout> inout, math_t scalar)#

输入矩阵中每个元素的幂(原地操作)

模板参数:
  • math_t – 矩阵元素类型

  • idx_t – 用于索引的整数类型

  • layout – 矩阵数据布局(必须是行优先或列优先)

参数:
  • handle[in] raft 句柄

  • inout[inout] 输入矩阵,结果也存储在其中

  • scalar[in] 每个元素都与标量相乘。

template<typename math_t, typename idx_t, typename layout>
void power(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout> inout)#

输入矩阵中每个元素的幂(原地操作)

模板参数:
  • math_t – 矩阵元素类型

  • idx_t – 用于索引的整数类型

  • layout – 矩阵数据布局(必须是行优先或列优先)

参数:
  • handle[in] raft 句柄

  • inout[inout] 输入矩阵,结果也存储在其中

比率#

#include <raft/matrix/ratio.cuh>

namespace raft::matrix

template<typename math_t, typename idx_t, typename layout>
void ratio(raft::resources const &handle, raft::device_matrix_view<const math_t, idx_t, layout> src, raft::device_matrix_view<math_t, idx_t, layout> dest)#

计算输入向量总和中每个元素的比率

模板参数:
  • math_t – 将执行数学操作的数据类型

  • idx_t – 用于索引的整数类型

  • layout – 矩阵数据布局(必须是行优先或列优先)

参数:
  • handle[in]

  • src[in] 输入矩阵

  • dest[out] 输出矩阵。结果存储在 dest 矩阵中。

template<typename math_t, typename idx_t, typename layout>
void ratio(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout> inout)#

计算输入向量总和中每个元素的比率

模板参数:
  • math_t – 将执行数学操作的数据类型

  • idx_t – 用于索引的整数类型

  • layout – 矩阵数据布局(必须是行优先或列优先)

参数:
  • handle[in]

  • inout[inout] 输入矩阵

倒数#

#include <raft/matrix/reciprocal.cuh>

namespace raft::matrix

template<typename math_t, typename idx_t, typename layout>
void reciprocal(raft::resources const &handle, raft::device_matrix_view<const math_t, idx_t, layout> in, raft::device_matrix_view<math_t, idx_t, layout> out, raft::host_scalar_view<math_t> scalar, bool setzero = false, math_t thres = 1e-15)#

输入矩阵中每个元素的倒数。

模板参数:
  • math_t – 将执行数学操作的数据类型

  • idx_t – 用于索引的整数类型

参数:
  • handle – raft 句柄

  • in – 输入矩阵,结果也存储在其中

  • out – 输出矩阵。结果存储在 out 矩阵中。

  • scalar – 每个元素都与标量相乘

  • setzero – 如果输入小于阈值则向下舍入为零

  • thres – 用于强制将输入设置为零的阈值

template<typename math_t, typename idx_t, typename layout>
void reciprocal(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout> inout, raft::host_scalar_view<math_t> scalar, bool setzero = false, math_t thres = 1e-15)#

输入矩阵中每个元素的倒数(原地操作)

模板参数:
  • math_t – 将执行数学操作的数据类型

  • idx_t – 用于索引的整数类型

  • layout – 矩阵数据布局(必须是行优先或列优先)

参数:
  • handle[in] 用于管理资源的 raft 句柄

  • inout[inout] 带有原地结果的输入矩阵

  • scalar[in] 每个元素都与标量相乘

  • setzero[in] 如果输入小于阈值则向下舍入为零

  • thres[in] 用于强制将输入设置为零的阈值

符号翻转#

#include <raft/matrix/sign_flip.cuh>

namespace raft::matrix

template<typename math_t, typename idx_t>
void sign_flip(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, col_major> inout)#

符号翻转稳定了列优先特征向量的符号。如果列具有负的 |max|,则符号被翻转。

模板参数:
  • math_t – 用于矩阵元素的浮点类型

  • idx_t – 用于索引的整数类型

参数:
  • handle[in] raft 句柄

  • inout[inout] 输入矩阵。结果也存储在此参数中

平方根#

#include <raft/matrix/sqrt.cuh>

namespace raft::matrix

template<typename math_t, typename idx_t, typename layout>
void sqrt(raft::resources const &handle, raft::device_matrix_view<const math_t, idx_t, layout> in, raft::device_matrix_view<math_t, idx_t, layout> out)#

输入矩阵中每个元素的平方根。

模板参数:
  • math_t – 将执行数学操作的数据类型

  • idx_t – 用于索引的整数类型

  • layout – 矩阵数据布局(必须是行优先或列优先)

参数:
  • handle[in] raft 句柄

  • in[in] 输入矩阵,结果也存储在其中

  • out[out] 输出矩阵。结果存储在 out 矩阵中。

template<typename math_t, typename idx_t, typename layout>
void sqrt(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout> inout)#

输入矩阵中每个元素的平方根(原地操作)

模板参数:
  • math_t – 将执行数学操作的数据类型

  • idx_t – 用于索引的整数类型

  • layout – 矩阵数据布局(必须是行优先或列优先)

参数:
  • handle[in] raft 句柄

  • inout[inout] 带有原地结果的输入矩阵

template<typename math_t, typename idx_t, typename layout>
void weighted_sqrt(raft::resources const &handle, raft::device_matrix_view<const math_t, idx_t, layout> in, raft::device_matrix_view<math_t, idx_t, layout> out, raft::host_scalar_view<math_t> scalar, bool set_neg_zero = false)#

输入矩阵中每个元素的平方根。

模板参数:
  • math_t – 将执行数学操作的数据类型

  • idx_t – 用于索引的整数类型

  • layout – 矩阵数据布局(必须是行优先或列优先)

参数:
  • handle[in] raft 句柄

  • in[in] 输入矩阵,结果也存储在其中

  • out[out] 输出矩阵。结果存储在 out 矩阵中。

  • scalar[in] 每个元素都与标量相乘

  • set_neg_zero[in] 是否将负数设置为零

template<typename math_t, typename idx_t, typename layout>
void weighted_sqrt(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout> inout, raft::host_scalar_view<math_t> scalar, bool set_neg_zero = false)#

输入矩阵中每个元素的平方根(原地操作)

模板参数:
  • math_t – 将执行数学操作的数据类型

  • idx_t – 用于索引的整数类型

  • layout – 矩阵数据布局(必须是行优先或列优先)

参数:
  • handle[in] raft 句柄

  • inout[inout] 输入矩阵,结果也存储在其中

  • scalar[in] 每个元素都与标量相乘

  • set_neg_zero[in] 是否将负数设置为零