结构体 faiss::RemapDimensionsTransform
-
struct RemapDimensionsTransform : public faiss::VectorTransform
重映射输入向量的维度,可能插入 0。严格来说,这也是一种线性变换,但我们不想用矩阵乘法来计算它。
公共函数
-
RemapDimensionsTransform(int d_in, int d_out, const int *map)
-
RemapDimensionsTransform(int d_in, int d_out, bool uniform = true)
将输入重映射到输出,根据需要跳过或插入维度。 如果 uniform 为真:均匀分配维度,否则只取前 d_out 个维度。
-
virtual void apply_noalloc(idx_t n, const float *x, float *xt) const override
应用变换并在提供的矩阵中返回结果
- 参数:
n – 要变换的向量数
x – 输入向量,大小为 n * d_in
xt – 输出向量,大小为 n * d_out
-
virtual void reverse_transform(idx_t n, const float *xt, float *x) const override
仅当映射是置换时,反向变换才正确
-
inline RemapDimensionsTransform()
-
virtual void check_identical(const VectorTransform &other) const override
-
virtual void train(idx_t n, const float *x)
在一组有代表性的向量上执行训练。默认情况下不执行任何操作。
- 参数:
n – 训练向量的数量
x – 训练向量,大小为 n * d
-
float *apply(idx_t n, const float *x) const
应用变换并在分配的指针中返回结果
- 参数:
n – 要变换的向量数
x – 输入向量,大小为 n * d_in
- 返回值:
输出向量,大小为 n * d_out
公共成员
-
std::vector<int> map
从输出维度到输入的映射,大小为 d_out -1 -> 将输出设置为 0
-
int d_in
-
int d_out
! 输入维度
-
bool is_trained
如果 VectorTransform 不需要训练,或者已经完成训练,则设置此值
-
RemapDimensionsTransform(int d_in, int d_out, const int *map)