c++ - Eigen 如何在零和一之间重新分配矩阵值

标签 c++ matrix eigen

我有一个由 3d vector 坐标组成的特征矩阵,如下所示:

 Eigen::MatrixXd V(m,n);

 V <<
 0.07790318440941 ,  2.93084729477845 ,0
 4.39385211199504 , -6.85288411884976 ,0
 4.79942053354374 , -6.21531436940366 ,0
 4.66539716949595 , -5.80851415050593 ,0
 4.05673773136193 , -5.07476450520047 ,0
 3.86587436704604 , -5.95679712917311 ,0
 3.08037179920737 , -5.63304123859979 ,0
 3.63881426545377 , -6.81338736661468 ,0
 2.78034109511472 , -5.31824526094401 ,0
 2.49863667468366 , -4.42841643782729 ,0
 2.17676933907024 , -4.07462683865738 ,0
 1.83413618944877 , -3.26212572878334 ,0
 1.07129357571697 , -2.18125695931175 ,0
 0.87907607105418 , -1.47159374716746 ,0
 0.08567653234750 , -1.08987456825602 ,0
 1.05117121796426 , -0.398720814302181,0
 1.66426149221552 , -1.75532754482808 ,0
 2.41664333430651 , -2.85689387781641 ,0
 2.98468613101269 , -3.5024571681322  ,0
 3.25323005684431 , -3.9571858297574  ,0
 3.83255698099666 , -4.64451314176494 ,0
 3.1964644093435  , -4.78861644450358 ,0
 2.4829670255391  , -3.63635780062414 ,0
 1.70284397625327 , -2.49963796336543 ,0

(此处缺少第 3 个坐标) 我希望它们只跨越 0 和 1 之间的值,其中 0 是最小值,1 是最大值。简而言之,扩展它们。我可以在 Eigen 中做什么?

最佳答案

如果您计划在给定时间根据您的动态大小矩阵的值应用您自己的归一化方案,您可能需要考虑使用固定大小的const 矩阵,否则您将根据矩阵的动态条目在给定时间的外观来不同地缩放矩阵条目。或者,根据您认为给定坐标的静态最小/最大值应用您的归一化。

无论如何,如果你想用你当前的矩阵继续这个,看看minCoeff()maxCoeff()功能。

计算 minmax(在所有矩阵项上),从所有矩阵项中减去 min (shift ),然后将所有矩阵条目除以 max - min(比例)。移位和缩放线性运算将生成一个矩阵,其中最小项的值为 0,最大值为 1,并且所有剩余值都相应地线性缩放,位于在 [0, 1] 中。

关于c++ - Eigen 如何在零和一之间重新分配矩阵值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56101065/

相关文章:

search - 在排序矩阵(mXn)中查找特定值,时间复杂度为 O(lgm) + O(lgn)

c# - 在 C# 中以数学方式导航大型 2D 数字网格

c++ - MVP 矩阵在着色器之外不工作?

c++ - 重载解析、定义函数和模板的顺序

c++ - 当我尝试通过 Qt 在 FTP 上获取文件时出错

c++ - 如何定义 '_LIBCPP_VERSION' ?

c++ - GeneralizedEigenSolver 不在特征库中给出特征向量

c++ - QT 从主类中声明 Mainwindow

python - 如何在 Python 中制作矩阵?

math - 使用 Eigen 计算 2D 相机的模型 View 矩阵