Найти не возвращаемый индекс для данного значения в Matlab
При написании кода для самоорганизующейся нейронной сети карты я написал кодлет для определения евклидова расстояния между весом каждого нейрона и каждым входом обучения. Затем я использовал функцию Compet, чтобы сделать элемент с максимальным значением расстояния равным 1 и нулем покоя (разреженная матрица).
Другими словами, в каждой строке должен быть хотя бы один элемент, равный 1. Но когда я запустил цикл, чтобы найти индексы таких элементов в каждой строке, используя функцию поиска, я получил пустую матрицу. Вот выдержка из кода.
euc=negdist(cluster,x_train);
comp=compet(euc);
for i=1:10
ind=find(comp(i,:)==1);
m=mean(x_train(:,ind),2);
label(ind)=i;
1 ответ
Функция compet
вернет матрицу нулей и единиц, где каждый столбец гарантированно имеет 1
в нем не каждый ряд. В вашем коде вы извлекаете строки со строкой comp(i,:)
и некоторые из этих строк не имеют никаких, так что find
возвращается []
, Вы должны обменять свои индексы на comp(:,i)
,
Я бы также перепроверил индексы, которые вы используете после этого для x_train
чтобы убедиться, что вы их не перевернули.