<divclass="line"><aname="l00005"></a><spanclass="lineno"> 5</span> <spanclass="comment"> * This source code is licensed under the CC-by-NC license found in the</span></div>
<divclass="line"><aname="l00006"></a><spanclass="lineno"> 6</span> <spanclass="comment"> * LICENSE file in the root directory of this source tree.</span></div>
<divclass="line"><aname="l00009"></a><spanclass="lineno"> 9</span> <spanclass="comment">// Copyright 2004-present Facebook. All Rights Reserved.</span></div>
<divclass="line"><aname="l00010"></a><spanclass="lineno"> 10</span> <spanclass="comment">// -*- c++ -*-</span></div>
<divclass="line"><aname="l00015"></a><spanclass="lineno"> 15</span> <spanclass="comment">/** Defines a few objects that apply transformations to a set of</span></div>
<divclass="line"><aname="l00016"></a><spanclass="lineno"> 16</span> <spanclass="comment"> * vectors Often these are pre-processing steps.</span></div>
<divclass="line"><aname="l00027"></a><spanclass="lineno"> 27</span> <spanclass="comment">/** Any transformation applied on a set of vectors */</span></div>
<divclass="line"><aname="l00040"></a><spanclass="lineno"> 40</span> <spanclass="comment"> /// set if the LinearTransform does not require training, or if</span></div>
<divclass="line"><aname="l00041"></a><spanclass="lineno"> 41</span> <spanclass="comment"> /// training is done already</span></div>
<divclass="line"><aname="l00045"></a><spanclass="lineno"> 45</span> <spanclass="comment"> /** Perform training on a representative set of vectors. Does</span></div>
<divclass="line"><aname="l00046"></a><spanclass="lineno"> 46</span> <spanclass="comment"> * nothing by default.</span></div>
<divclass="line"><aname="l00053"></a><spanclass="lineno"> 53</span> <spanclass="comment"> /** apply the random roation, return new allocated matrix</span></div>
<divclass="line"><aname="l00054"></a><spanclass="lineno"> 54</span> <spanclass="comment"> * @param x size n * d_in</span></div>
<divclass="line"><aname="l00055"></a><spanclass="lineno"> 55</span> <spanclass="comment"> * @return size n * d_out</span></div>
<divclass="line"><aname="l00059"></a><spanclass="lineno"> 59</span> <spanclass="comment"> /// same as apply, but result is pre-allocated</span></div>
<divclass="line"><aname="l00060"></a><spanclass="lineno"> 60</span> <spanclass="comment"></span><spanclass="keyword">virtual</span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1VectorTransform.html#a90f1a218c224c049f1bd8b77a78d6aa0">apply_noalloc</a> (idx_t n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span> * x,</div>
<divclass="line"><aname="l00063"></a><spanclass="lineno"> 63</span> <spanclass="comment"> /// reverse transformation. May not be implemented or may return</span></div>
<divclass="line"><aname="l00074"></a><spanclass="lineno"> 74</span> <spanclass="comment">/** Generic linear transformation, with bias term applied on output</span></div>
<divclass="line"><aname="l00075"></a><spanclass="lineno"> 75</span> <spanclass="comment"> * y = A * x + b</span></div>
<divclass="line"><aname="l00080"></a><spanclass="lineno"> 80</span> <spanclass="keywordtype">bool</span> have_bias; <spanclass="comment">///! whether to use the bias term</span></div>
<divclass="line"><aname="l00089"></a><spanclass="lineno">89</span> <spanclass="comment"> /// both d_in > d_out and d_out < d_in are supported</span></div>
<divclass="line"><aname="l00093"></a><spanclass="lineno"> 93</span> <spanclass="comment"> /// same as apply, but result is pre-allocated</span></div>
<divclass="line"><aname="l00094"></a><spanclass="lineno"> 94</span> <spanclass="comment"></span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1LinearTransform.html#af9c20b4ae67691b5713489884ca9f80f">apply_noalloc</a>(idx_t n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span>* x, <spanclass="keywordtype">float</span>* xt) <spanclass="keyword">const override</span>;</div>
<divclass="line"><aname="l00097"></a><spanclass="lineno"> 97</span> <spanclass="comment"> /// is reverse transform if A has orthonormal lines</span></div>
<divclass="line"><aname="l00098"></a><spanclass="lineno"> 98</span> <spanclass="comment"></span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1LinearTransform.html#a1642efca4f5eb524c29722b0441c4d13">transform_transpose</a> (idx_t n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span> * y,</div>
<divclass="line"><aname="l00111"></a><spanclass="lineno"> 111</span> <spanclass="comment"> /// both d_in > d_out and d_out < d_in are supported</span></div>
<divclass="line"><aname="l00115"></a><spanclass="lineno"> 115</span> <spanclass="comment"> /// must be called before the transform is used</span></div>
<divclass="line"><aname="l00124"></a><spanclass="lineno"> 124</span> <spanclass="comment">/** Applies a principal component analysis on a set of vectors,</span></div>
<divclass="line"><aname="l00125"></a><spanclass="lineno"> 125</span> <spanclass="comment"> * with optionally whitening and random rotation. */</span></div>
<divclass="line"><aname="l00128"></a><spanclass="lineno"> 128</span> <spanclass="comment"> /** after transformation the components are multiplied by</span></div>
<divclass="line"><aname="l00139"></a><spanclass="lineno"> 139</span> <spanclass="comment"> /// ratio between # training vectors and dimension</span></div>
<divclass="line"><aname="l00142"></a><spanclass="lineno"> 142</span> <spanclass="comment"> /// try to distribute output eigenvectors in this many bins</span></div>
<divclass="line"><aname="l00154"></a><spanclass="lineno"> 154</span> <spanclass="comment">// the final matrix is computed after random rotation and/or whitening</span></div>
<divclass="line"><aname="l00158"></a><spanclass="lineno"> 158</span> <spanclass="comment"> /// train on n vectors. If n < d_in then the eigenvector matrix</span></div>
<divclass="line"><aname="l00159"></a><spanclass="lineno"> 159</span> <spanclass="comment"> /// will be completed with 0s</span></div>
<divclass="line"><aname="l00160"></a><spanclass="lineno"> 160</span> <spanclass="comment"></span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1PCAMatrix.html#a8f2dd12da8dce3cbeb22da9c5d4ec3e7">train</a>(<aclass="code"href="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">Index::idx_t</a> n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span>* x) <spanclass="keyword">override</span>;</div>
<divclass="line"><aname="l00167"></a><spanclass="lineno"> 167</span> <spanclass="comment"> /// called after mean, PCAMat and eigenvalues are computed</span></div>
<divclass="line"><aname="l00174"></a><spanclass="lineno"> 174</span> <spanclass="comment">/** Applies a rotation to align the dimensions with a PQ to minimize</span></div>
<divclass="line"><aname="l00175"></a><spanclass="lineno"> 175</span> <spanclass="comment"> * the reconstruction error. Can be used before an IndexPQ or an</span></div>
<divclass="line"><aname="l00176"></a><spanclass="lineno"> 176</span> <spanclass="comment"> * IndexIVFPQ. The method is the non-parametric version described in:</span></div>
<divclass="line"><aname="l00184"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1OPQMatrix.html#a07ad0c0c84f96a6880c1c8eaf09596e3"> 184</a></span> <spanclass="keywordtype">int</span><aclass="code"href="structfaiss_1_1OPQMatrix.html#a07ad0c0c84f96a6880c1c8eaf09596e3">M</a>; <spanclass="comment">///< nb of subquantizers</span></div>
<divclass="line"><aname="l00185"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1OPQMatrix.html#a12cb3e05989dee37592b682070c31000"> 185</a></span> <spanclass="comment"></span><spanclass="keywordtype">int</span><aclass="code"href="structfaiss_1_1OPQMatrix.html#a12cb3e05989dee37592b682070c31000">niter</a>; <spanclass="comment">///< Number of outer training iterations</span></div>
<divclass="line"><aname="l00186"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1OPQMatrix.html#ab88c87a3931ec356904abf5f1f797a83"> 186</a></span> <spanclass="comment"></span><spanclass="keywordtype">int</span><aclass="code"href="structfaiss_1_1OPQMatrix.html#ab88c87a3931ec356904abf5f1f797a83">niter_pq</a>; <spanclass="comment">///< Number of training iterations for the PQ</span></div>
<divclass="line"><aname="l00187"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1OPQMatrix.html#a6406e97b05c831cc19b9343be3b43a1f"> 187</a></span> <spanclass="comment"></span><spanclass="keywordtype">int</span><aclass="code"href="structfaiss_1_1OPQMatrix.html#a6406e97b05c831cc19b9343be3b43a1f">niter_pq_0</a>; <spanclass="comment">///< same, for the first outer iteration</span></div>
<divclass="line"><aname="l00189"></a><spanclass="lineno"> 189</span> <spanclass="comment"> /// if there are too many training points, resample</span></div>
<divclass="line"><aname="l00193"></a><spanclass="lineno"> 193</span> <spanclass="comment"> /// if d2 != -1, output vectors of this dimension</span></div>
<divclass="line"><aname="l00202"></a><spanclass="lineno"> 202</span> <spanclass="comment">/** remap dimensions for intput vectors, possibly inserting 0s</span></div>
<divclass="line"><aname="l00203"></a><spanclass="lineno"> 203</span> <spanclass="comment"> * strictly speaking this is also a linear transform but we don't want</span></div>
<divclass="line"><aname="l00204"></a><spanclass="lineno"> 204</span> <spanclass="comment"> * to compute it with matrix multiplies */</span></div>
<divclass="line"><aname="l00214"></a><spanclass="lineno"> 214</span> <spanclass="comment"> /// remap input to output, skipping or inserting dimensions as needed</span></div>
<divclass="line"><aname="l00215"></a><spanclass="lineno"> 215</span> <spanclass="comment"> /// if uniform: distribute dimensions uniformly</span></div>
<divclass="line"><aname="l00216"></a><spanclass="lineno"> 216</span> <spanclass="comment"> /// otherwise just take the d_out first ones.</span></div>
<divclass="line"><aname="l00221"></a><spanclass="lineno"> 221</span> <spanclass="comment"> /// reverse transform correct only when the mapping is a permuation</span></div>
<divclass="line"><aname="l00222"></a><spanclass="lineno"> 222</span> <spanclass="comment"></span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1RemapDimensionsTransform.html#a2fc83e79e4d3c7853bfd6931cbbaf82a">reverse_transform</a>(idx_t n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span>* xt, <spanclass="keywordtype">float</span>* x) <spanclass="keyword">const override</span>;</div>
<divclass="line"><aname="l00228"></a><spanclass="lineno"> 228</span> <spanclass="comment">/** Index that applies a LinearTransform transform on vectors before</span></div>
<divclass="line"><aname="l00229"></a><spanclass="lineno"> 229</span> <spanclass="comment"> * handing them over to a sub-index */</span></div>
<divclass="line"><aname="l00235"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexPreTransform.html#ae5ec3f184eb211e7d6e204082b52c8c0"> 235</a></span> <spanclass="keywordtype">bool</span><aclass="code"href="structfaiss_1_1IndexPreTransform.html#ae5ec3f184eb211e7d6e204082b52c8c0">own_fields</a>; <spanclass="comment">///! whether pointers are deleted in destructor</span></div>
<divclass="line"><aname="l00241"></a><spanclass="lineno"> 241</span> <spanclass="comment"> /// ltrans is the last transform before the index</span></div>
<divclass="line"><aname="l00254"></a><spanclass="lineno"> 254</span> <spanclass="comment"> /** removes IDs from the index. Not supported by all indexes.</span></div>
<divclass="line"><aname="l00268"></a><spanclass="lineno"> 268</span> <spanclass="comment"> /// apply the transforms in the chain. The returned float * may be</span></div>
<divclass="line"><aname="l00269"></a><spanclass="lineno"> 269</span> <spanclass="comment"> /// equal to x, otherwise it should be deallocated.</span></div>
<divclass="line"><aname="l00270"></a><spanclass="lineno"> 270</span> <spanclass="comment"></span><spanclass="keyword">const</span><spanclass="keywordtype">float</span> * <aclass="code"href="structfaiss_1_1IndexPreTransform.html#aa773a5763ebdd1561152b34453fda96d">apply_chain</a> (<aclass="code"href="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">idx_t</a> n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span> *x) <spanclass="keyword">const</span>;</div>
<divclass="ttc"id="structfaiss_1_1LinearTransform_html_a1642efca4f5eb524c29722b0441c4d13"><divclass="ttname"><ahref="structfaiss_1_1LinearTransform.html#a1642efca4f5eb524c29722b0441c4d13">faiss::LinearTransform::transform_transpose</a></div><divclass="ttdeci">void transform_transpose(idx_t n, const float *y, float *x) const </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00134">VectorTransform.cpp:134</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPreTransform_html_aee3cbbe7915ec9ed13d59ca9276bdefc"><divclass="ttname"><ahref="structfaiss_1_1IndexPreTransform.html#aee3cbbe7915ec9ed13d59ca9276bdefc">faiss::IndexPreTransform::index</a></div><divclass="ttdeci">Index * index</div><divclass="ttdoc">! chain of tranforms </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00233">VectorTransform.h:233</a></div></div>
<divclass="ttc"id="structfaiss_1_1RandomRotationMatrix_html"><divclass="ttname"><ahref="structfaiss_1_1RandomRotationMatrix.html">faiss::RandomRotationMatrix</a></div><divclass="ttdoc">Randomly rotate a set of vectors. </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00109">VectorTransform.h:109</a></div></div>
<divclass="ttc"id="structfaiss_1_1OPQMatrix_html_a12cb3e05989dee37592b682070c31000"><divclass="ttname"><ahref="structfaiss_1_1OPQMatrix.html#a12cb3e05989dee37592b682070c31000">faiss::OPQMatrix::niter</a></div><divclass="ttdeci">int niter</div><divclass="ttdoc">Number of outer training iterations. </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00185">VectorTransform.h:185</a></div></div>
<divclass="ttc"id="structfaiss_1_1RandomRotationMatrix_html_a64e406c8f73c7692bcf7d97b27305fc6"><divclass="ttname"><ahref="structfaiss_1_1RandomRotationMatrix.html#a64e406c8f73c7692bcf7d97b27305fc6">faiss::RandomRotationMatrix::RandomRotationMatrix</a></div><divclass="ttdeci">RandomRotationMatrix(int d_in, int d_out)</div><divclass="ttdoc">both d_in &gt; d_out and d_out &lt; d_in are supported </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00112">VectorTransform.h:112</a></div></div>
<divclass="ttc"id="structfaiss_1_1RandomRotationMatrix_html_a857ad8c32fb76b3298d4eea4338ff66f"><divclass="ttname"><ahref="structfaiss_1_1RandomRotationMatrix.html#a857ad8c32fb76b3298d4eea4338ff66f">faiss::RandomRotationMatrix::init</a></div><divclass="ttdeci">void init(int seed)</div><divclass="ttdoc">must be called before the transform is used </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00164">VectorTransform.cpp:164</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPreTransform_html_a8e48ac9fde5e76e378553b2a6ec2c86e"><divclass="ttname"><ahref="structfaiss_1_1IndexPreTransform.html#a8e48ac9fde5e76e378553b2a6ec2c86e">faiss::IndexPreTransform::reset</a></div><divclass="ttdeci">void reset() override</div><divclass="ttdoc">removes all elements from the database. </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00842">VectorTransform.cpp:842</a></div></div>
<divclass="ttc"id="structfaiss_1_1OPQMatrix_html_ab88c87a3931ec356904abf5f1f797a83"><divclass="ttname"><ahref="structfaiss_1_1OPQMatrix.html#ab88c87a3931ec356904abf5f1f797a83">faiss::OPQMatrix::niter_pq</a></div><divclass="ttdeci">int niter_pq</div><divclass="ttdoc">Number of training iterations for the PQ. </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00186">VectorTransform.h:186</a></div></div>
<divclass="ttc"id="structfaiss_1_1LinearTransform_html_aa40e156ef57fe206cd5f3a58ec0660da"><divclass="ttname"><ahref="structfaiss_1_1LinearTransform.html#aa40e156ef57fe206cd5f3a58ec0660da">faiss::LinearTransform::A</a></div><divclass="ttdeci">std::vector< float > A</div><divclass="ttdoc">! whether to use the bias term </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00083">VectorTransform.h:83</a></div></div>
<divclass="ttc"id="structfaiss_1_1RemapDimensionsTransform_html_a09202a195ff5f75f83e68792751a637f"><divclass="ttname"><ahref="structfaiss_1_1RemapDimensionsTransform.html#a09202a195ff5f75f83e68792751a637f">faiss::RemapDimensionsTransform::map</a></div><divclass="ttdeci">std::vector< int > map</div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00210">VectorTransform.h:210</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPreTransform_html_aa773a5763ebdd1561152b34453fda96d"><divclass="ttname"><ahref="structfaiss_1_1IndexPreTransform.html#aa773a5763ebdd1561152b34453fda96d">faiss::IndexPreTransform::apply_chain</a></div><divclass="ttdeci">const float * apply_chain(idx_t n, const float *x) const </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00795">VectorTransform.cpp:795</a></div></div>
<divclass="ttc"id="structfaiss_1_1OPQMatrix_html_a1e314577db0c6cd4a709503f73eb71e2"><divclass="ttname"><ahref="structfaiss_1_1OPQMatrix.html#a1e314577db0c6cd4a709503f73eb71e2">faiss::OPQMatrix::train</a></div><divclass="ttdeci">void train(Index::idx_t n, const float *x) override</div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00547">VectorTransform.cpp:547</a></div></div>
<divclass="ttc"id="structfaiss_1_1PCAMatrix_html_ac9a4c97b5861081dfd8ca5881bb1a677"><divclass="ttname"><ahref="structfaiss_1_1PCAMatrix.html#ac9a4c97b5861081dfd8ca5881bb1a677">faiss::PCAMatrix::balanced_bins</a></div><divclass="ttdeci">int balanced_bins</div><divclass="ttdoc">try to distribute output eigenvectors in this many bins </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00143">VectorTransform.h:143</a></div></div>
<divclass="ttc"id="structfaiss_1_1Index_html_a040c6aed1f224f3ea7bf58eebc0c31a4"><divclass="ttname"><ahref="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">faiss::Index::idx_t</a></div><divclass="ttdeci">long idx_t</div><divclass="ttdoc">all indices are this type </div><divclass="ttdef"><b>Definition:</b><ahref="Index_8h_source.html#l00062">Index.h:62</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPreTransform_html_ae5ec3f184eb211e7d6e204082b52c8c0"><divclass="ttname"><ahref="structfaiss_1_1IndexPreTransform.html#ae5ec3f184eb211e7d6e204082b52c8c0">faiss::IndexPreTransform::own_fields</a></div><divclass="ttdeci">bool own_fields</div><divclass="ttdoc">! the sub-index </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00235">VectorTransform.h:235</a></div></div>
<divclass="ttc"id="structfaiss_1_1OPQMatrix_html_a6406e97b05c831cc19b9343be3b43a1f"><divclass="ttname"><ahref="structfaiss_1_1OPQMatrix.html#a6406e97b05c831cc19b9343be3b43a1f">faiss::OPQMatrix::niter_pq_0</a></div><divclass="ttdeci">int niter_pq_0</div><divclass="ttdoc">same, for the first outer iteration </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00187">VectorTransform.h:187</a></div></div>
<divclass="ttc"id="structfaiss_1_1OPQMatrix_html_a8e61a84ea6bcbdee1809028b6aaa3aae"><divclass="ttname"><ahref="structfaiss_1_1OPQMatrix.html#a8e61a84ea6bcbdee1809028b6aaa3aae">faiss::OPQMatrix::reverse_transform</a></div><divclass="ttdeci">void reverse_transform(idx_t n, const float *xt, float *x) const override</div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00708">VectorTransform.cpp:708</a></div></div>
<divclass="ttc"id="structfaiss_1_1VectorTransform_html_a7350d4dd28d60866d55ba4f75d2da84c"><divclass="ttname"><ahref="structfaiss_1_1VectorTransform.html#a7350d4dd28d60866d55ba4f75d2da84c">faiss::VectorTransform::train</a></div><divclass="ttdeci">virtual void train(idx_t n, const float *x)</div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00080">VectorTransform.cpp:80</a></div></div>
<divclass="ttc"id="structfaiss_1_1RandomRotationMatrix_html_a3ad86e9ae3bdc2090c1f5fc62a335c16"><divclass="ttname"><ahref="structfaiss_1_1RandomRotationMatrix.html#a3ad86e9ae3bdc2090c1f5fc62a335c16">faiss::RandomRotationMatrix::reverse_transform</a></div><divclass="ttdeci">void reverse_transform(idx_t n, const float *xt, float *x) const override</div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00189">VectorTransform.cpp:189</a></div></div>
<divclass="ttc"id="structfaiss_1_1RemapDimensionsTransform_html_a2fc83e79e4d3c7853bfd6931cbbaf82a"><divclass="ttname"><ahref="structfaiss_1_1RemapDimensionsTransform.html#a2fc83e79e4d3c7853bfd6931cbbaf82a">faiss::RemapDimensionsTransform::reverse_transform</a></div><divclass="ttdeci">void reverse_transform(idx_t n, const float *xt, float *x) const override</div><divclass="ttdoc">reverse transform correct only when the mapping is a permuation </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00923">VectorTransform.cpp:923</a></div></div>
<divclass="ttc"id="structfaiss_1_1PCAMatrix_html_abf427521a66cbfaaf0b7aae16bcb6e93"><divclass="ttname"><ahref="structfaiss_1_1PCAMatrix.html#abf427521a66cbfaaf0b7aae16bcb6e93">faiss::PCAMatrix::reverse_transform</a></div><divclass="ttdeci">void reverse_transform(idx_t n, const float *xt, float *x) const override</div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00521">VectorTransform.cpp:521</a></div></div>
<divclass="ttc"id="structfaiss_1_1OPQMatrix_html_afdd5b2c74d19ccc5c7a6e0199333321a"><divclass="ttname"><ahref="structfaiss_1_1OPQMatrix.html#afdd5b2c74d19ccc5c7a6e0199333321a">faiss::OPQMatrix::max_train_points</a></div><divclass="ttdeci">size_t max_train_points</div><divclass="ttdoc">if there are too many training points, resample </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00190">VectorTransform.h:190</a></div></div>
<divclass="ttc"id="structfaiss_1_1OPQMatrix_html_a6eb9d18ff15b1c598d3aa3bc9ab84519"><divclass="ttname"><ahref="structfaiss_1_1OPQMatrix.html#a6eb9d18ff15b1c598d3aa3bc9ab84519">faiss::OPQMatrix::OPQMatrix</a></div><divclass="ttdeci">OPQMatrix(int d=0, int M=1, int d2=-1)</div><divclass="ttdoc">if d2 != -1, output vectors of this dimension </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00534">VectorTransform.cpp:534</a></div></div>
<divclass="ttc"id="structfaiss_1_1PCAMatrix_html_a117a70b8fca6d125725fe49fddebf97b"><divclass="ttname"><ahref="structfaiss_1_1PCAMatrix.html#a117a70b8fca6d125725fe49fddebf97b">faiss::PCAMatrix::prepare_Ab</a></div><divclass="ttdeci">void prepare_Ab()</div><divclass="ttdoc">called after mean, PCAMat and eigenvalues are computed </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00426">VectorTransform.cpp:426</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPreTransform_html_a03c77c582a3421952e2cba2057083059"><divclass="ttname"><ahref="structfaiss_1_1IndexPreTransform.html#a03c77c582a3421952e2cba2057083059">faiss::IndexPreTransform::add</a></div><divclass="ttdeci">void add(idx_t n, const float *x) override</div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00810">VectorTransform.cpp:810</a></div></div>
<divclass="ttc"id="structfaiss_1_1RemapDimensionsTransform_html_a550be3d40c221d2134bf06a13dd33c4d"><divclass="ttname"><ahref="structfaiss_1_1RemapDimensionsTransform.html#a550be3d40c221d2134bf06a13dd33c4d">faiss::RemapDimensionsTransform::apply_noalloc</a></div><divclass="ttdeci">void apply_noalloc(idx_t n, const float *x, float *xt) const override</div><divclass="ttdoc">same as apply, but result is pre-allocated </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00911">VectorTransform.cpp:911</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPreTransform_html_a07fef0553b2ef2907f394470f61898b2"><divclass="ttname"><ahref="structfaiss_1_1IndexPreTransform.html#a07fef0553b2ef2907f394470f61898b2">faiss::IndexPreTransform::add_with_ids</a></div><divclass="ttdeci">void add_with_ids(idx_t n, const float *x, const long *xids) override</div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00819">VectorTransform.cpp:819</a></div></div>
<divclass="ttc"id="structfaiss_1_1PCAMatrix_html_af111f055b7571703a3aa270d89e99321"><divclass="ttname"><ahref="structfaiss_1_1PCAMatrix.html#af111f055b7571703a3aa270d89e99321">faiss::PCAMatrix::random_rotation</a></div><divclass="ttdeci">bool random_rotation</div><divclass="ttdoc">random rotation after PCA </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00137">VectorTransform.h:137</a></div></div>
<divclass="ttc"id="structfaiss_1_1PCAMatrix_html_abdce90f57a3c4401f5230f03da901e0d"><divclass="ttname"><ahref="structfaiss_1_1PCAMatrix.html#abdce90f57a3c4401f5230f03da901e0d">faiss::PCAMatrix::max_points_per_d</a></div><divclass="ttdeci">size_t max_points_per_d</div><divclass="ttdoc">ratio between # training vectors and dimension </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00140">VectorTransform.h:140</a></div></div>
<divclass="ttc"id="structfaiss_1_1VectorTransform_html_af3b3a8bf95911f4b28128001c83f91a5"><divclass="ttname"><ahref="structfaiss_1_1VectorTransform.html#af3b3a8bf95911f4b28128001c83f91a5">faiss::VectorTransform::apply</a></div><divclass="ttdeci">float * apply(idx_t n, const float *x) const </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00072">VectorTransform.cpp:72</a></div></div>
<divclass="ttc"id="structfaiss_1_1VectorTransform_html_a90f1a218c224c049f1bd8b77a78d6aa0"><divclass="ttname"><ahref="structfaiss_1_1VectorTransform.html#a90f1a218c224c049f1bd8b77a78d6aa0">faiss::VectorTransform::apply_noalloc</a></div><divclass="ttdeci">virtual void apply_noalloc(idx_t n, const float *x, float *xt) const =0</div><divclass="ttdoc">same as apply, but result is pre-allocated </div></div>
<divclass="ttc"id="structfaiss_1_1OPQMatrix_html_a07ad0c0c84f96a6880c1c8eaf09596e3"><divclass="ttname"><ahref="structfaiss_1_1OPQMatrix.html#a07ad0c0c84f96a6880c1c8eaf09596e3">faiss::OPQMatrix::M</a></div><divclass="ttdeci">int M</div><divclass="ttdoc">nb of subquantizers </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8h_source.html#l00184">VectorTransform.h:184</a></div></div>
<divclass="ttc"id="structfaiss_1_1LinearTransform_html_af9c20b4ae67691b5713489884ca9f80f"><divclass="ttname"><ahref="structfaiss_1_1LinearTransform.html#af9c20b4ae67691b5713489884ca9f80f">faiss::LinearTransform::apply_noalloc</a></div><divclass="ttdeci">void apply_noalloc(idx_t n, const float *x, float *xt) const override</div><divclass="ttdoc">same as apply, but result is pre-allocated </div><divclass="ttdef"><b>Definition:</b><ahref="VectorTransform_8cpp_source.html#l00105">VectorTransform.cpp:105</a></div></div>