注意
RAFT 中的向量搜索和聚类算法正在迁移到一个专门用于向量搜索的新库,名为 cuVS。在此迁移期间,我们将继续支持 RAFT 中的向量搜索算法,但在 RAPIDS 24.06(六月)版本发布后将不再更新它们。我们计划在 RAPIDS 24.10(十月)版本发布前完成迁移,并在 24.12(十二月)版本中将它们从 RAFT 中完全移除。
摘要统计#
协方差#
#include <raft/stats/cov.cuh>
namespace raft::stats
-
template<typename value_t, typename idx_t, typename layout_t>
void cov(raft::resources const &handle, raft::device_matrix_view<value_t, idx_t, layout_t> data, raft::device_vector_view<const value_t, idx_t> mu, raft::device_matrix_view<value_t, idx_t, layout_t> covar, bool sample, bool stable)# 计算输入矩阵的协方差。
假定对给定列执行均值运算。
注意
如果 stable=true,则输入数据在此函数返回后将被均值中心化!
- 模板参数:
value_t – 数据类型
idx_t – 索引类型
layout_t – 输入数据的布局类型。
- 参数:
handle – [in] raft 句柄
data – [in] 输入矩阵(最后会进行均值中心化!)(长度 = nrows * ncols)
mu – [in] 输入矩阵的均值向量 (长度 = ncols)
covar – [out] 输出协方差矩阵 (长度 = ncols * ncols)
sample – [in] 是否计算样本协方差。换句话说,分别对于 true 或 false,是使用 N-1 还是 N 进行归一化
stable – [in] 是否运行较慢但数值稳定的版本
直方图#
#include <raft/stats/histogram.cuh>
namespace raft::stats
-
enum HistType#
支持的直方图实现类型。
值
-
enumerator HistTypeSmemBits1#
使用共享内存原子操作,但直方图bin为 1 位整数
-
enumerator HistTypeSmemBits2#
使用共享内存原子操作,但直方图bin为 2 位整数
-
enumerator HistTypeSmemBits4#
使用共享内存原子操作,但直方图bin为 4 位整数
-
enumerator HistTypeSmemBits8#
使用共享内存原子操作,但直方图bin为 1 字节整数
-
enumerator HistTypeSmemBits16#
使用共享内存原子操作,但直方图bin为 2 字节整数
-
enumerator HistTypeGmem#
仅使用全局原子操作
-
enumerator HistTypeSmem#
使用共享内存原子操作减少全局流量
-
enumerator HistTypeSmemMatchAny#
使用带 match_any intrinsic 的共享内存原子操作,进一步减少共享内存流量。这只能在 Volta 及更高架构上启用。如果尝试在旧架构上启用,它将回退到
HistTypeSmem
。注意
仅当输入数据集在给定 warp 中有大量重复时才使用此方法,否则此算法可能比
HistTypeSmem
慢得多!
-
enumerator HistTypeSmemHash#
在共享内存中构建活动直方图bin的哈希表
-
enumerator HistTypeAuto#
在运行时决定给定输入的最佳算法
-
enumerator HistTypeSmemBits1#
-
template<typename value_t, typename idx_t, typename binner_op = IdentityBinner<value_t, idx_t>>
void histogram(raft::resources const &handle, HistType type, raft::device_matrix_view<const value_t, idx_t, raft::col_major> data, raft::device_matrix_view<int, idx_t, raft::col_major> bins, binner_op binner = IdentityBinner<value_t, idx_t>())# 对输入数据执行直方图计算。它根据输入数据向量长度选择合适的加载大小。它还支持使用专门的基于 smem 的哈希技术处理大直方图bin的情况。
注意
binner_op 的签名是
int func(value_t, IdxT);
- 模板参数:
value_t – 输入数据类型
idx_t – 用于计算索引的数据类型
binner_op – 接受输入数据并计算其直方图bin索引的操作
- 参数:
handle – [in] raft 句柄
type – [in] 要选择的直方图实现类型
data – [in] 输入数据(列主序)(长度 = nrows * ncols)
bins – [out] 输出直方图bin(列主序)(长度 = nbins * ncols)
binner – [in] 计算输入数据的直方图bin索引的操作
均值#
#include <raft/stats/mean.cuh>
namespace raft::stats
-
template<typename value_t, typename idx_t, typename layout_t>
void mean(raft::resources const &handle, raft::device_matrix_view<const value_t, idx_t, layout_t> data, raft::device_vector_view<value_t, idx_t> mu)# 计算输入矩阵的均值。
假定对给定列执行均值运算。
- 模板参数:
value_t – 数据类型
idx_t – 索引类型
layout_t – 输入矩阵的布局类型。
- 参数:
handle – [in] raft 句柄
data – [in] 输入矩阵
mu – [out] 输出均值向量
-
template<typename value_t, typename idx_t, typename layout_t>
void mean(raft::resources const &handle, raft::device_matrix_view<const value_t, idx_t, layout_t> data, raft::device_vector_view<value_t, idx_t> mu, bool sample)# 计算输入矩阵的均值。
假定对给定列执行均值运算。注意:此调用已弃用,请使用不带
sample
参数的mean
调用。- 模板参数:
value_t – 数据类型
idx_t – 索引类型
layout_t – 输入矩阵的布局类型。
- 参数:
handle – [in] raft 句柄
data – [in] 输入矩阵
mu – [out] 输出均值向量
sample – [in] 是否计算样本均值。换句话说,分别对于 true 或 false,是使用 N-1 还是 N 进行归一化
均值中心化#
#include <raft/stats/mean_center.cuh>
namespace raft::stats
-
template<typename value_t, typename idx_t, typename layout_t>
void mean_center(raft::resources const &handle, raft::device_matrix_view<const value_t, idx_t, layout_t> data, raft::device_vector_view<const value_t, idx_t> mu, raft::device_matrix_view<value_t, idx_t, layout_t> out, bool bcast_along_rows)# 根据其均值对输入矩阵进行中心化。
- 模板参数:
value_t – 数据类型
idx_t – 索引类型
layout_t – 输入矩阵的布局类型。
- 参数:
handle – [in] raft 句柄
data – [in] 大小为 nrows * ncols 的输入矩阵
mu – [in] 均值向量,如果 bcast_along_rows 为 true 则大小为 ncols,否则为 nrows
out – [out] 输出的均值中心化矩阵
bcast_along_rows – [in] 是否沿行或列广播向量
-
template<typename value_t, typename idx_t, typename layout_t>
void mean_add(raft::resources const &handle, raft::device_matrix_view<const value_t, idx_t, layout_t> data, raft::device_vector_view<const value_t, idx_t> mu, raft::device_matrix_view<value_t, idx_t, layout_t> out, bool bcast_along_rows)# 根据其均值对输入矩阵进行加法。
- 模板参数:
Type – 数据类型
idx_t – 索引类型
layout_t – 输入矩阵的布局类型。
TPB – 启动的 cuda 核函数的每块线程数
- 参数:
handle – [in] raft 句柄
data – [in] 大小为 nrows * ncols 的输入矩阵
mu – [in] 均值向量,如果 bcast_along_rows 为 true 则大小为 ncols,否则为 nrows
out – [out] 输出的均值中心化矩阵
bcast_along_rows – [in] 是否沿行或列广播向量
均值方差#
#include <raft/stats/mean_var.cuh>
namespace raft::stats
-
template<typename value_t, typename idx_t, typename layout_t>
void meanvar(raft::resources const &handle, raft::device_matrix_view<const value_t, idx_t, layout_t> data, raft::device_vector_view<value_t, idx_t> mean, raft::device_vector_view<value_t, idx_t> var, bool sample)# 计算给定矩阵每列的均值和方差。
该操作在一次遍历中完成。当您需要同时计算均值和方差,或需要计算方差但没有均值时,请考虑使用它。它比依次运行
mean
和vars
要快近两倍,因为这三个核函数都是内存密集型的。- 模板参数:
value_t – 数据类型
idx_t – 用于寻址的整数类型
layout_t – 输入矩阵的布局类型。
- 参数:
handle – [in] raft 句柄
data – [in] 大小为 [N, D] 的输入矩阵
mean – [out] 大小为 D 的输出均值向量
var – [out] 大小为 D 的输出方差向量
sample – [in] 是否计算样本方差。换句话说,分别对于 true 或 false,是使用 N-1 还是 N 对方差进行归一化。
最小值/最大值#
#include <raft/stats/minmax.cuh>
namespace raft::stats
-
template<typename value_t, typename idx_t>
void minmax(raft::resources const &handle, raft::device_matrix_view<const value_t, idx_t, raft::col_major> data, std::optional<raft::device_vector_view<const unsigned, idx_t>> rowids, std::optional<raft::device_vector_view<const unsigned, idx_t>> colids, raft::device_vector_view<value_t, idx_t> globalmin, raft::device_vector_view<value_t, idx_t> globalmax, std::optional<raft::device_vector_view<value_t, idx_t>> sampledcols)# 计算输入矩阵每列的最小值/最大值,并可选择根据给定的行/列 ID 映射向量进行子采样。
注意
此方法作出以下假设
输入和输出矩阵假定为列主序
ncols 足够小,可以将所有列的最小值/最大值完全放入共享内存
- 模板参数:
value_t – 输入矩阵元素的数据类型。
idx_t – 矩阵范围的索引类型。
- 参数:
handle – [in] raft 句柄
data – [in] 输入数据(列主序),大小为 [nrows, ncols],除非 rowids 或 colids 长度较小
rowids – [in] 可选的行 ID 映射,长度为 nrows。如果您想完全跳过此索引查找,请传递 std::nullopt
colids – [in] 可选的列 ID 映射,长度为 ncols。如果您想完全跳过此索引查找,请传递 std::nullopt
globalmin – [out] 最终的列全局最小值 (大小 = ncols)
globalmax – [out] 最终的列全局最大值 (大小 = ncols)
sampledcols – [out] 输出采样数据。如果您不需要此数据,请传递 std::nullopt
标准差#
#include <raft/stats/stddev.cuh>
namespace raft::stats
-
template<typename value_t, typename idx_t, typename layout_t>
void stddev(raft::resources const &handle, raft::device_matrix_view<const value_t, idx_t, layout_t> data, raft::device_vector_view<const value_t, idx_t> mu, raft::device_vector_view<value_t, idx_t> std, bool sample)# 计算输入矩阵的标准差。
假定对给定列执行标准差运算。
- 模板参数:
value_t – 数据类型
idx_t – 用于寻址的整数类型
layout_t – 输入矩阵的布局类型。
- 参数:
handle – [in] raft 句柄
data – [in] 输入矩阵
mu – [in] 均值向量
std – [out] 输出标准差向量
sample – [in] 是否计算样本标准差。换句话说,分别对于 true 或 false,是使用 N-1 还是 N 进行归一化
求和#
#include <raft/stats/sum.cuh>
namespace raft::stats
-
template<typename value_t, typename idx_t, typename layout_t>
void sum(raft::resources const &handle, raft::device_matrix_view<const value_t, idx_t, layout_t> input, raft::device_vector_view<value_t, idx_t> output)# 计算输入矩阵的和。
假定对给定列执行求和运算。
- 模板参数:
value_t – 数据类型
idx_t – 用于寻址的整数类型
layout_t – 输入矩阵的布局类型。
- 参数:
handle – [in] raft 句柄
input – [in] 输入矩阵
output – [out] 输出均值向量
加权平均值#
#include <raft/stats/weighted_mean.cuh>
namespace raft::stats
-
template<typename value_t, typename idx_t, typename layout_t>
void weighted_mean(raft::resources const &handle, raft::device_matrix_view<const value_t, idx_t, layout_t> data, raft::device_vector_view<const value_t, idx_t> weights, raft::device_vector_view<value_t, idx_t> mu, bool along_rows)# 计算输入矩阵与权重向量的加权均值,可沿行或沿列进行。
- 模板参数:
value_t – 数据类型
idx_t – 用于寻址的整数类型
layout_t – 输入矩阵的布局类型。
- 参数:
handle – [in] raft 句柄
data – [in] 大小为 nrows * ncols 的输入矩阵
weights – [in] 权重向量,如果 along_row 为 true 则大小为 ncols,否则大小为 nrows
mu – [out] 输出均值向量,如果 along_row 为 true 则大小为 nrows,否则大小为 ncols
along_rows – [in] 是否沿行或列进行归约
-
template<typename value_t, typename idx_t, typename layout_t>
void row_weighted_mean(raft::resources const &handle, raft::device_matrix_view<const value_t, idx_t, layout_t> data, raft::device_vector_view<const value_t, idx_t> weights, raft::device_vector_view<value_t, idx_t> mu)# 使用列权重向量计算输入矩阵的行加权平均值。
- 模板参数:
value_t – 数据类型
idx_t – 用于寻址的整数类型
layout_t – 输入矩阵的布局类型。
- 参数:
handle – [in] raft 句柄
data – [in] 大小为 nrows * ncols 的输入矩阵
weights – [in] 大小为 ncols 的权重向量
mu – [out] 大小为 nrows 的输出均值向量
-
template<typename value_t, typename idx_t, typename layout_t>
void col_weighted_mean(raft::resources const &handle, raft::device_matrix_view<const value_t, idx_t, layout_t> data, raft::device_vector_view<const value_t, idx_t> weights, raft::device_vector_view<value_t, idx_t> mu)# 使用行权重向量计算输入矩阵的列加权平均值。
- 模板参数:
value_t – 数据类型
idx_t – 用于寻址的整数类型
layout_t – 输入矩阵的布局类型。
- 参数:
handle – [in] raft 句柄
data – [in] 大小为 nrows * ncols 的输入矩阵
weights – [in] 大小为 nrows 的权重向量
mu – [out] 大小为 ncols 的输出均值向量