Я пытаюсь создать матрицу сходства с собственной библиотекой в наборе данных. Я только что прочитал файл csv в собственную матрицу, но знаю, что как клиент Matlab я ищу что-то вроде bsxfun или что-то, чтобы определить расстояния между экземплярами с помощью евклидова вычисления расстояния. Как я могу получить решение или какие источники, функции могут помочь мне ?
Предполагая, что ваши образцы хранятся построчно в матрице D, вы можете сделать:
VectorXd N = D.rowwise().squaredNorm();
MatrixXd S = N.replicate(1,n) + N.transpose().replicate(n,1);
S.noalias() -= 2. * D * D.transpose();
S = S.array().sqrt();
Это использует тот факт, что |x-y|²=x²+y²-2x'y
, Оператор noalias () — это просто оптимизация для Eigen, в этом продукте нет риска наложения псевдонимов, поэтому временные данные не нужны. Оператор .array () переключается на мир массивов, где все функции применяются по коэффициентам.
Других решений пока нет …