MATLAB - передача параметров в пользовательскую функцию расстояния pdist
Я реализовал пользовательскую функцию расстояния для алгоритма k-medoids в Matlab, следуя указаниям, найденным в pdist.
В основном это сравнивает два вектора, скажем A
а также B
(который также может иметь разную длину) и проверяет, "совпадают ли их элементы с допуском": A(i)
а также B(j)
сосуществовать с толерантностью tol
если
abs( A(i) - B(j) ) <= tol
Не вдаваясь в подробности, расстояние велико, если есть несколько "совпадений с допуском".
Все работает, как я ожидаю, если я определю tol
как константа внутри функции, но теперь я хотел бы передать ее в качестве параметра всякий раз, когда я вызываю k-medoids. В документации pdist эта возможность не упоминается:
Функция расстояния, указанная с помощью @: D = pdist(X,@distfun). Функция расстояния должна иметь форму d2 = distfun(XI,XJ), принимая в качестве аргументов вектор XI 1 на n, соответствующий одной строке X, и матрицу XJ m2-на-n, соответствующую нескольким строкам X. distfun должен принять матрицу XJ с произвольным числом строк. distfun должен возвращать вектор m22 на 1 расстояний d2, k-й элемент которых является расстоянием между XI и XJ(k,:).
Итак, можно ли каким-то образом передать параметры в пользовательскую функцию расстояния в Matlab? Если нет, то какие альтернативы мне следует рассмотреть?
1 ответ
Чтобы ответить на ваш общий вопрос, да, вы можете передать пользовательские параметры в пользовательскую функцию расстояния. Вы можете определить distfun таким образом
a = 1; % Variable you want to pass to your function
distanceFunction = @(xi, xj)yourCustomDistanceFunction(xi, xj, a)
yourCustomDistanceFunction
следует принять параметры по умолчанию в качестве первых двух входных данных, а затем последний вход является вашей собственной переменной (которая не передается pdist
).
Затем предоставьте это pdist
следующим образом
pdist(X, distanceFunction)