Я только начал использовать библиотеку алгебры Eigen Matrix и намеревался создать матрицу подобия набора данных, предложения?

Я пытаюсь создать матрицу сходства с собственной библиотекой в ​​наборе данных. Я только что прочитал файл csv в собственную матрицу, но знаю, что как клиент Matlab я ищу что-то вроде bsxfun или что-то, чтобы определить расстояния между экземплярами с помощью евклидова вычисления расстояния. Как я могу получить решение или какие источники, функции могут помочь мне ?

1

Решение

Предполагая, что ваши образцы хранятся построчно в матрице 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 () переключается на мир массивов, где все функции применяются по коэффициентам.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector