Matrix에 따라 Matlab에서 문제가 발생합니다. for 루프를 제거하면 코드가 향상 될 수 있다고 생각합니다. 그러나 나는 이것을 고치는 법을 정말로 모른다. 아무도 도와 줄 수 없니? 코드는이 코드행렬 계산에서 for 루프를 제거하는 matlab
K = 3;
X = [1 2; 3 4; 5 6; 7 8];
idx = [1;2;3;1];
for i = 1:K
ids = (idx == i);
centroids(i,:) = sum(bsxfun(@times, X, ids))./ sum(ids);
end
, 데이터 포인트는 4 × X이다. K = 3 도심이 있으므로 도심은 3x2의 행렬입니다. 이 코드는 데이터 포인트와 가장 가까운 센트로이더를 사용하여 센티 우드의 새로운 위치를 찾는 K-mean 함수의 일부입니다. 나는 아마 다음과 같이 시작 FOR 루프없이 무언가로 코드를 만들고 싶어 :
ids = bsxfun(@eq, idx, 1:K);
centroids = ..............
잘 보입니다. 여기에'bsxfun'이 필요 없습니다. –
좋은 해결책입니다. 'centroid'를 미리 할당하는 것을 잊지 마세요 – Daniel
@Daniel 물론! 큰'X' 행렬에 대해 더 빠른'bsxfun' 솔루션을 추가했습니다. – David