注意
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] 是否将负数设置为零