距离#
此页面提供了 cuvs/distance
包中公开元素的 C++ 类参考。cuVS 的距离计算已经高度优化,并支持各种不同的距离度量。
距离类型#
#include <cuvs/distance/distance.hpp>
namespace cuvs::distance
警告
doxygenenum: Cannot find enum “cuvs::distance::DistanceType” in doxygen xml output for project “cuvs” from directory: ../../cpp/doxygen/_xml/
成对距离#
include <cuvs/distance/distance.hpp>
namespace cuvs::distance
- void pairwise_distance(
- raft::resources const &handle,
- raft::device_matrix_view<const float, std::int64_t, raft::layout_c_contiguous> const x,
- raft::device_matrix_view<const float, std::int64_t, raft::layout_c_contiguous> const y,
- raft::device_matrix_view<float, std::int64_t, raft::layout_c_contiguous> dist,
- cuvs::distance::DistanceType metric,
- float metric_arg = 2.0f
计算两个矩阵之间的成对距离。
注意:目前仅支持连续的行主序或列主序布局。
用法示例
#include <raft/core/resources.hpp> #include <raft/core/device_mdarray.hpp> #include <cuvs/distance/distance.hpp> raft::resources handle; int n_samples = 5000; int n_features = 50; auto input = raft::make_device_matrix<float>(handle, n_samples, n_features); // ... fill input with data ... auto output = raft::make_device_matrix<float>(handle, n_samples, n_samples); auto metric = cuvs::distance::DistanceType::L2SqrtExpanded; cuvs::distance::pairwise_distance(handle, raft::make_const(input.view()), raft::make_const(input.view()), output.view(), metric);
- 参数:
handle – [in] 用于管理昂贵资源的 raft handle
x – [in] 第一组点 (大小 n*k)
y – [in] 第二组点 (大小 m*k)
dist – [out] 输出距离矩阵 (大小 n*m)
metric – [in] 要评估的距离度量
metric_arg – [in] 度量参数 (用于 Minkowski 距离)
- void pairwise_distance(
- raft::resources const &handle,
- raft::device_matrix_view<const double, std::int64_t, raft::layout_c_contiguous> const x,
- raft::device_matrix_view<const double, std::int64_t, raft::layout_c_contiguous> const y,
- raft::device_matrix_view<double, std::int64_t, raft::layout_c_contiguous> dist,
- cuvs::distance::DistanceType metric,
- double metric_arg = 2.0f
计算两个矩阵之间的成对距离。
注意:目前仅支持连续的行主序或列主序布局。
用法示例
#include <raft/core/resources.hpp> #include <raft/core/device_mdarray.hpp> #include <cuvs/distance/distance.hpp> raft::resources handle; int n_samples = 5000; int n_features = 50; auto input = raft::make_device_matrix<double>(handle, n_samples, n_features); // ... fill input with data ... auto output = raft::make_device_matrix<double>(handle, n_samples, n_samples); auto metric = cuvs::distance::DistanceType::L2SqrtExpanded; cuvs::distance::pairwise_distance(handle, raft::make_const(input.view()), raft::make_const(input.view()), output.view(), metric);
- 参数:
handle – [in] 用于管理昂贵资源的 raft handle
x – [in] 第一组点 (大小 n*k)
y – [in] 第二组点 (大小 m*k)
dist – [out] 输出距离矩阵 (大小 n*m)
metric – [in] 要评估的距离度量
metric_arg – [in] 度量参数 (用于 Minkowski 距离)
- void pairwise_distance(
- raft::resources const &handle,
- raft::device_matrix_view<const half, std::int64_t, raft::layout_c_contiguous> const x,
- raft::device_matrix_view<const half, std::int64_t, raft::layout_c_contiguous> const y,
- raft::device_matrix_view<float, std::int64_t, raft::layout_c_contiguous> dist,
- cuvs::distance::DistanceType metric,
- float metric_arg = 2.0f
计算两个矩阵之间的成对距离。
注意:目前仅支持连续的行主序或列主序布局。
用法示例
#include <raft/core/resources.hpp> #include <raft/core/device_mdarray.hpp> #include <cuvs/distance/distance.hpp> raft::resources handle; int n_samples = 5000; int n_features = 50; auto input = raft::make_device_matrix<float>(handle, n_samples, n_features); // ... fill input with data ... auto output = raft::make_device_matrix<float>(handle, n_samples, n_samples); auto metric = cuvs::distance::DistanceType::L2SqrtExpanded; cuvs::distance::pairwise_distance(handle, raft::make_const(input.view()), raft::make_const(input.view()), output.view(), metric);
- 参数:
handle – [in] 用于管理昂贵资源的 raft handle
x – [in] 第一组点 (大小 n*k)
y – [in] 第二组点 (大小 m*k)
dist – [out] 输出距离矩阵 (大小 n*m)
metric – [in] 要评估的距离度量
metric_arg – [in] 度量参数 (用于 Minkowski 距离)
- void pairwise_distance(
- raft::resources const &handle,
- raft::device_matrix_view<const float, std::int64_t, raft::layout_f_contiguous> const x,
- raft::device_matrix_view<const float, std::int64_t, raft::layout_f_contiguous> const y,
- raft::device_matrix_view<float, std::int64_t, raft::layout_f_contiguous> dist,
- cuvs::distance::DistanceType metric,
- float metric_arg = 2.0f
计算两个矩阵之间的成对距离。
注意:目前仅支持连续的行主序或列主序布局。
用法示例
#include <raft/core/resources.hpp> #include <raft/core/device_mdarray.hpp> #include <cuvs/distance/distance.hpp> raft::resources handle; int n_samples = 5000; int n_features = 50; auto input = raft::make_device_matrix<float>(handle, n_samples, n_features); // ... fill input with data ... auto output = raft::make_device_matrix<float>(handle, n_samples, n_samples); auto metric = cuvs::distance::DistanceType::L2SqrtExpanded; cuvs::distance::pairwise_distance(handle, raft::make_const(input.view()), raft::make_const(input.view()), output.view(), metric);
- 参数:
handle – [in] 用于管理昂贵资源的 raft handle
x – [in] 第一组点 (大小 n*k)
y – [in] 第二组点 (大小 m*k)
dist – [out] 输出距离矩阵 (大小 n*m)
metric – [in] 要评估的距离度量
metric_arg – [in] 度量参数 (用于 Minkowski 距离)
- void pairwise_distance(
- raft::resources const &handle,
- raft::device_matrix_view<const double, std::int64_t, raft::layout_f_contiguous> const x,
- raft::device_matrix_view<const double, std::int64_t, raft::layout_f_contiguous> const y,
- raft::device_matrix_view<double, std::int64_t, raft::layout_f_contiguous> dist,
- cuvs::distance::DistanceType metric,
- double metric_arg = 2.0f
计算两个矩阵之间的成对距离。
注意:目前仅支持连续的行主序或列主序布局。
用法示例
#include <raft/core/resources.hpp> #include <raft/core/device_mdarray.hpp> #include <cuvs/distance/distance.hpp> raft::resources handle; int n_samples = 5000; int n_features = 50; auto input = raft::make_device_matrix<double>(handle, n_samples, n_features); // ... fill input with data ... auto output = raft::make_device_matrix<double>(handle, n_samples, n_samples); auto metric = cuvs::distance::DistanceType::L2SqrtExpanded; cuvs::distance::pairwise_distance(handle, raft::make_const(input.view()), raft::make_const(input.view()), output.view(), metric);
- 参数:
handle – [in] 用于管理昂贵资源的 raft handle
x – [in] 第一组点 (大小 n*k)
y – [in] 第二组点 (大小 m*k)
dist – [out] 输出距离矩阵 (大小 n*m)
metric – [in] 要评估的距离度量
metric_arg – [in] 度量参数 (用于 Minkowski 距离)
- void pairwise_distance(
- raft::resources const &handle,
- raft::device_matrix_view<const half, std::int64_t, raft::layout_f_contiguous> const x,
- raft::device_matrix_view<const half, std::int64_t, raft::layout_f_contiguous> const y,
- raft::device_matrix_view<float, std::int64_t, raft::layout_f_contiguous> dist,
- cuvs::distance::DistanceType metric,
- float metric_arg = 2.0f
计算两个矩阵之间的成对距离。
注意:目前仅支持连续的行主序或列主序布局。
用法示例
#include <raft/core/resources.hpp> #include <raft/core/device_mdarray.hpp> #include <cuvs/distance/distance.hpp> raft::resources handle; int n_samples = 5000; int n_features = 50; auto input = raft::make_device_matrix<float>(handle, n_samples, n_features); // ... fill input with data ... auto output = raft::make_device_matrix<float>(handle, n_samples, n_samples); auto metric = cuvs::distance::DistanceType::L2SqrtExpanded; cuvs::distance::pairwise_distance(handle, raft::make_const(input.view()), raft::make_const(input.view()), output.view(), metric);
- 参数:
handle – [in] 用于管理昂贵资源的 raft handle
x – [in] 第一组点 (大小 n*k)
y – [in] 第二组点 (大小 m*k)
dist – [out] 输出距离矩阵 (大小 n*m)
metric – [in] 要评估的距离度量
metric_arg – [in] 度量参数 (用于 Minkowski 距离)
- void pairwise_distance(
- raft::resources const &handle,
- raft::device_csr_matrix_view<const float, int, int, int> x,
- raft::device_csr_matrix_view<const float, int, int, int> y,
- raft::device_matrix_view<float, int, raft::row_major> dist,
- cuvs::distance::DistanceType metric,
- float metric_arg = 2.0f
使用提供的输入配置和距离函数计算 x 和 y 之间的稀疏成对距离。
#include <raft/core/device_resources.hpp> #include <raft/core/device_csr_matrix.hpp> #include <raft/core/device_mdspan.hpp> int x_n_rows = 100000; int y_n_rows = 50000; int n_cols = 10000; raft::device_resources handle; auto x = raft::make_device_csr_matrix<float>(handle, x_n_rows, n_cols); auto y = raft::make_device_csr_matrix<float>(handle, y_n_rows, n_cols); ... // populate data ... auto out = raft::make_device_matrix<float>(handle, x_nrows, y_nrows); auto metric = cuvs::distance::DistanceType::L2Expanded; raft::sparse::distance::pairwise_distance(handle, x.view(), y.view(), out, metric);
- 参数:
handle – [in] raft::resources
x – [in] raft::device_csr_matrix_view
y – [in] raft::device_csr_matrix_view
dist – [out] raft::device_matrix_view 密集矩阵
metric – [in] 要使用的距离度量
metric_arg – [in] 度量参数 (用于 Minkowski 距离)
- void pairwise_distance(
- raft::resources const &handle,
- raft::device_csr_matrix_view<const double, int, int, int> x,
- raft::device_csr_matrix_view<const double, int, int, int> y,
- raft::device_matrix_view<double, int, raft::row_major> dist,
- cuvs::distance::DistanceType metric,
- float metric_arg = 2.0f
使用提供的输入配置和距离函数计算 x 和 y 之间的稀疏成对距离。
#include <raft/core/device_resources.hpp> #include <raft/core/device_csr_matrix.hpp> #include <raft/core/device_mdspan.hpp> int x_n_rows = 100000; int y_n_rows = 50000; int n_cols = 10000; raft::device_resources handle; auto x = raft::make_device_csr_matrix<double>(handle, x_n_rows, n_cols); auto y = raft::make_device_csr_matrix<double>(handle, y_n_rows, n_cols); ... // populate data ... auto out = raft::make_device_matrix<double>(handle, x_nrows, y_nrows); auto metric = cuvs::distance::DistanceType::L2Expanded; raft::sparse::distance::pairwise_distance(handle, x.view(), y.view(), out, metric);
- 参数:
handle – [in] raft::resources
x – [in] raft::device_csr_matrix_view
y – [in] raft::device_csr_matrix_view
dist – [out] raft::device_matrix_view 密集矩阵
metric – [in] 要使用的距离度量
metric_arg – [in] 度量参数 (用于 Minkowski 距离)