2012-03-19 8 views
0

У меня есть вектор centroids размера n и вектор points размера p (оба из них на самом деле являются Vx3 матрицей, где V этим количество точек или центроидов).Как сгенерировать этот вектор в Octave/MATLAB?

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

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

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

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

+0

Вы посмотрели L2_distance: http://web.mit.edu/cocosci/isomap/code/L2_distance.m? Я думаю, что это может быть полезно для достаточно малых матриц. – Paul

+0

@Paul Это назначение, и я не могу включить другие файлы, кроме явно разрешенных. Я хотел знать, что является самым коротким способом создания этого списка расстояний. :) –

ответ

1

У меня есть длинное решение, чем 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, и у вас будет ваше решение.

+0

вам следует избегать repmat, это медленно, используйте 'pt (ones (size_i_want, 1)', чтобы получить тот же эффект superfast –

+0

@ g24l Когда я делаю 'v = [1 2 3]; v (единицы (3, 1))) 'в Octave я получаю только' 1 1 1', а не '1 2 3; 1 2 3; 1 2 3'. Что я делаю неправильно? –

+1

@PaulManta, oops sorry забыл': 'Я использую matlab , но это поведение должно быть одинаковым, но вы должны сделать 'v (ones (3,1), :)' –

2

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

arrayfun(@(x) norm(x),pt(ones(v,1),:)-centroids) 
Смежные вопросы