选择#

此页面提供 cuvs/selection 包中公开元素的 C++ 类参考。

Select-K#

#include <cuvs/selection/select_k.hpp>

namespace cuvs::selection

group 批量选择 k 个最小或最大的键/值

函数

void select_k(
raft::resources const &handle,
raft::device_matrix_view<const float, int64_t, raft::row_major> in_val,
std::optional<raft::device_matrix_view<const int64_t, int64_t, raft::row_major>> in_idx,
raft::device_matrix_view<float, int64_t, raft::row_major> out_val,
raft::device_matrix_view<int64_t, int64_t, raft::row_major> out_idx,
bool select_min,
bool sorted = false,
SelectAlgo algo = SelectAlgo::kAuto,
std::optional<raft::device_vector_view<const int64_t, int64_t>> len_i = std::nullopt
)#

从输入数据的每一行中选择 k 个最小或最大的键/值。

如果将输入数据 in_val 视为一个具有 len 列和 batch_size 行的行主序矩阵,则此函数将选择每一行中的 k 个最小/最大值,并填充大小为 (batch_size, k) 的行主序矩阵 out_val

示例用法

using namespace raft;
// get a 2D row-major array of values to search through
auto in_values = {... input device_matrix_view<const float, int64_t, row_major> ...}
// prepare output arrays
auto out_extents = make_extents<int64_t>(in_values.extent(0), k);
auto out_values  = make_device_mdarray<float>(handle, out_extents);
auto out_indices = make_device_mdarray<int64_t>(handle, out_extents);
// search `k` smallest values in each row
cuvs::selection::select_k(
  handle, in_values, std::nullopt, out_values.view(), out_indices.view(), true);

参数:
  • handle[in] 可重用资源的容器

  • in_val[in] 输入值 [batch_size, len];这些值将被比较和选择。

  • in_idx[in] 可选的输入负载 [batch_size, len];通常,这些是对应 in_val 的索引。如果 in_idxstd::nullopt,则表示一个连续数组 0...len-1

  • out_val[out] 输出值 [batch_size, k];来自 in_val 的每一行中的 k 个最小/最大值。

  • out_idx[out] 输出负载(例如索引)[batch_size, k];与 out_val 一起选择的负载。

  • select_min[in] 是否选择 k 个最小(true)或最大(false)的键。

  • sorted[in] 是否确保选定的对按值排序

  • algo[in] 要使用的选择算法

  • len_i[in] 大小为 (batch_size) 的可选数组,提供每行的长度

void select_k(
raft::resources const &handle,
raft::device_matrix_view<const float, int64_t, raft::row_major> in_val,
std::optional<raft::device_matrix_view<const int, int64_t, raft::row_major>> in_idx,
raft::device_matrix_view<float, int64_t, raft::row_major> out_val,
raft::device_matrix_view<int, int64_t, raft::row_major> out_idx,
bool select_min,
bool sorted = false,
SelectAlgo algo = SelectAlgo::kAuto,
std::optional<raft::device_vector_view<const int, int64_t>> len_i = std::nullopt
)#
void select_k(
raft::resources const &handle,
raft::device_matrix_view<const float, int64_t, raft::row_major> in_val,
std::optional<raft::device_matrix_view<const uint32_t, int64_t, raft::row_major>> in_idx,
raft::device_matrix_view<float, int64_t, raft::row_major> out_val,
raft::device_matrix_view<uint32_t, int64_t, raft::row_major> out_idx,
bool select_min,
bool sorted = false,
SelectAlgo algo = SelectAlgo::kAuto,
std::optional<raft::device_vector_view<const uint32_t, int64_t>> len_i = std::nullopt
)#

从输入数据的每一行中选择 k 个最小或最大的键/值。

如果将输入数据 in_val 视为一个具有 len 列和 batch_size 行的行主序矩阵,则此函数将选择每一行中的 k 个最小/最大值,并填充大小为 (batch_size, k) 的行主序矩阵 out_val

示例用法

using namespace raft;
// get a 2D row-major array of values to search through
auto in_values = {... input device_matrix_view<const float, int64_t, row_major> ...}
// prepare output arrays
auto out_extents = make_extents<int64_t>(in_values.extent(0), k);
auto out_values  = make_device_mdarray<float>(handle, out_extents);
auto out_indices = make_device_mdarray<uint32_t>(handle, out_extents);
// search `k` smallest values in each row
cuvs::selection::select_k(
  handle, in_values, std::nullopt, out_values.view(), out_indices.view(), true);

参数:
  • handle[in] 可重用资源的容器

  • in_val[in] 输入值 [batch_size, len];这些值将被比较和选择。

  • in_idx[in] 可选的输入负载 [batch_size, len];通常,这些是对应 in_val 的索引。如果 in_idxstd::nullopt,则表示一个连续数组 0...len-1

  • out_val[out] 输出值 [batch_size, k];来自 in_val 的每一行中的 k 个最小/最大值。

  • out_idx[out] 输出负载(例如索引)[batch_size, k];与 out_val 一起选择的负载。

  • select_min[in] 是否选择 k 个最小(true)或最大(false)的键。

  • sorted[in] 是否确保选定的对按值排序

  • algo[in] 要使用的选择算法

  • len_i[in] 大小为 (batch_size) 的可选数组,提供每行的长度

void select_k(
raft::resources const &handle,
raft::device_matrix_view<const half, int64_t, raft::row_major> in_val,
std::optional<raft::device_matrix_view<const uint32_t, int64_t, raft::row_major>> in_idx,
raft::device_matrix_view<half, int64_t, raft::row_major> out_val,
raft::device_matrix_view<uint32_t, int64_t, raft::row_major> out_idx,
bool select_min,
bool sorted = false,
SelectAlgo algo = SelectAlgo::kAuto,
std::optional<raft::device_vector_view<const uint32_t, int64_t>> len_i = std::nullopt
)#

从输入数据的每一行中选择 k 个最小或最大的键/值。

如果将输入数据 in_val 视为一个具有 len 列和 batch_size 行的行主序矩阵,则此函数将选择每一行中的 k 个最小/最大值,并填充大小为 (batch_size, k) 的行主序矩阵 out_val

示例用法

using namespace raft;
// get a 2D row-major array of values to search through
auto in_values = {... input device_matrix_view<const half, int64_t, row_major> ...}
// prepare output arrays
auto out_extents = make_extents<int64_t>(in_values.extent(0), k);
auto out_values  = make_device_mdarray<half>(handle, out_extents);
auto out_indices = make_device_mdarray<uint32_t>(handle, out_extents);
// search `k` smallest values in each row
cuvs::selection::select_k(
  handle, in_values, std::nullopt, out_values.view(), out_indices.view(), true);

参数:
  • handle[in] 可重用资源的容器

  • in_val[in] 输入值 [batch_size, len];这些值将被比较和选择。

  • in_idx[in] 可选的输入负载 [batch_size, len];通常,这些是对应 in_val 的索引。如果 in_idxstd::nullopt,则表示一个连续数组 0...len-1

  • out_val[out] 输出值 [batch_size, k];来自 in_val 的每一行中的 k 个最小/最大值。

  • out_idx[out] 输出负载(例如索引)[batch_size, k];与 out_val 一起选择的负载。

  • select_min[in] 是否选择 k 个最小(true)或最大(false)的键。

  • sorted[in] 是否确保选定的对按值排序

  • algo[in] 要使用的选择算法

  • len_i[in] 大小为 (batch_size) 的可选数组,提供每行的长度