2016-02-15 1 views
-1

Я хочу мозговой штурм идеи в MATLAB с вами, ребята. Для матрицы с большим количеством столбцов (14K) и несколько рядов (7), где столбцы являются элементами и строк особенности элементов, я хотел бы вычислить сходство с всеми деталями и держать его в матрице, которая:Представьте сходство между многими пунктами в приятной манере. MATLAB

  1. Легко вычислить
  2. Легкий доступ

на 1. Я пришел с блестящей идеей использования pdist(), который очень быстро:

A % my matrix 
S = pdist(A') % computes the similarity btw all columns very fast 

Однако доступ s не удобно. Я предпочитаю получать доступ к сходству между пунктами i и j, например. используя S(i,j):

S(4,5) % is the similarity between item 4 and 5 

В своем первоначальном определении, S массив не является матрицей. Делает ли это 2D-матрицей плохую идею хранения? Могли бы мы подумать о крутой идее, которая может помочь мне найти, какая симлотичность соответствует тем, какие предметы быстро?

спасибо.

ответ

2

Вы можете использовать pdist2(A',A'). То, что возвращается, по существу, является матрицей расстояния в ее стандартной форме, где элемент (i,j) - это несходство (или сходство) между i-м и j-м рисунком.
Кроме того, если вы хотите использовать pdist(), это нормально, вы можете преобразовать полученный массив в известную матрицу расстояний, используя функцию squareform().

Итак, в заключение, если A ваш набор данных и S матрица расстояний, вы можете использовать либо

S=pdist(A'); 
S=squareform(S); 

или

S=pdist2(A',A'); 

Теперь, что касается хранения точка-обзора, вы обязательно заметите, что такая матрица симметрична. То, что Matlab по существу предлагает с массивом S в pdist(), состоит в том, чтобы сэкономить место: из-за того, что такая матрица симметрична, вы можете также сохранить половину ее в векторе. Действительно, массив S имеет m(m-1)/2 элементов, тогда как матричная форма имеет m^2 элементов (если m - это количество шаблонов в вашем учебном наборе). С другой стороны, наиболее вероятно, что доступ к такому вектору сложнее, тогда как матрица абсолютно проста.

2

Я не совсем уверен, чтобы понять, что ваш вопрос, но если вы хотите получить доступ к S(i, j) легко, то функция squareform делается для этого:

S = squareform(pdist(A')); 

Бест,

+0

Спасибо вам обоим из решения работают хорошо. Пока что для 14K элементов я не сталкиваюсь с проблемами памяти, но ваш комментарий прав Allessiox – Yas

Смежные вопросы