2017-01-12 5 views
-1

Я сделал некоторую кластеризацию k-значений, используя встроенную функцию в Matlab на некотором наборе данных, матрицу 500x39. Выбор 7 кластеров. От:Использование индекса кластеризации в другой функции

[idx,C] = kmeans(Data',No_Clusters)

Я получаю индекс кластера, IDX (39x1) и центроиды места, с (500x7).

Затем я хочу использовать этот вывод idx и свой набор данных в функции мультиблок PCA, которая была доступна онлайн (http://www.models.life.ku.dk/~courses/MBtoolbox/mbtmain.htm). Поэтому просто скажите, что мой idx:

idx = 5 4 1 5 7 3 2 6 7 1 3 ... 

для каждого столбца в наборе данных. Я хочу, чтобы это устроить, чтобы дать мне

[3,10][7][6,11][2][1,4][8][5,9] 

, где каждое число в [] соответствует столбцу в наборе данных для кластера idx.

ответ

0

Вы можете использовать accumarray для определения местоположения каждого уникального индекса

result = accumarray(idx(:), (1:numel(idx)).', [], @(x){x}) 

По сути, это делает то, что он использует свой idx arrray (первый вход) в значение «группа» (индекс столбца, соответствующий каждое значение, указанное как второй вход) вместе и выполнить операцию для каждой группы, которая в этом случае является просто анонимной функцией, которая принимает все значения в группе и помещает их в массив ячеек.

+0

Спасибо, что работает фантастически хорошо – MRaff16