Как сгенерировать этот вектор в Octave / MATLAB? - PullRequest
0 голосов
/ 19 марта 2012

У меня есть вектор centroids размера n и вектор points размера p (оба они на самом деле Vx3 матрицы, где V - количество точек или центроидов).

Для любой данной точки pt из points я хочу сгенерировать еще один вектор расстояний: расстояние pt от каждого центроида.

Существует ли какой-либо стиль функционального программированияспособ сделать это?Может быть, что-то вроде этого (в стиле Python):

distances = [ norm(pt - c) for c in centroids ]

Если нет, то какой для меня самый хороший способ сделать это?Я использую Octave, но я также добавил тег , поскольку языки очень похожи (по крайней мере, из того, что я вижу).

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Таким образом, у вас есть 3D центроиды и 3D точки, и вы хотите, чтобы любые точки точка в points определяли расстояние от всех центроидов.

arrayfun(@(x) norm(x),pt(ones(v,1),:)-centroids)
1 голос
/ 19 марта 2012

У меня более длинное решение, чем у g24l ... Я не уверен, для каких версий MATLAB arrayfun подходит, поэтому это должно работать на более старых версиях:

pt = rand(1,3);
centroids = rand(2,3);
pt = repmat(pt, [size(centroids,1) 1]); % duplicate your point to vectorize
dists = sum((pt - centroids).^2,2)

Все, что вам нужно сделать, это обернуть это в функцию, которая принимает pt и матрицу centroids, и у вас будет ваше решение.

...