Собственно, как перераспределить значения матрицы между нулем и единицей - PullRequest
2 голосов
/ 12 мая 2019

У меня есть собственная матрица, которая состоит из трехмерных векторных координат, например:

 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?

1 Ответ

1 голос
/ 12 мая 2019

Если вы планируете применить свою собственную схему нормализации на основе значений вашей матрицы с динамическим размером в данный момент времени, вы можете рассмотреть возможность использования матрицы const фиксированного размера вместо этого, в противном случае вы будет по-разному масштабировать ваши элементы матрицы в зависимости от того, как динамические элементы матрицы выглядят в данный момент времени. В качестве альтернативы, примените вашу нормализацию на основе того, что вы считаете статическим значением min / max данной координаты.

В любом случае, , если , вы хотите продолжить работу с вашей текущей матрицей, взгляните на функции minCoeff() и maxCoeff().

Вычислите min и max (по всем элементам матрицы), вычтите min из всех элементов матрицы ( shift ) и затем разделите все элементы матрицы на max - min (масштаб). Линейные операции сдвига и масштабирования приведут к матрице, в которой минимальная запись оценивается 0, а максимальная - 1, а все остальные значения соответственно линейно масштабируются, находясь в [0, 1].

...