그룹 번호가 A
(예 : findgroups
) 인 벡터 A
그룹 내의 인덱스를 포함하는 동일한 길이의 벡터 B
을 반환하는 방법은 무엇입니까?그룹 내의 MATLAB 인덱스
예를 들어, A = [1 1 1 2 2 2 1 1 2 2]
이면 B = [1 2 3 1 2 3 4 5 4 5]
입니다.
추가 1
이 내 자신의 솔루션은
s = splitapply(@(x) {x, [1:numel(x)]'}, [1:numel(A)]', A(:))
B(vertcat(s{:,1})) = vertcat(s{:,2})
이지만 다소 복잡한 것 같다. 해결책은 A
의 값을 대체하기 위해 루프를 사용 할 수 있습니다
s = bsxfun(@eq, A(:).', unique(A(:))); % Or, in recent versions, s = A==unique(A).';
t = cumsum(s,2);
B = reshape(t(s), size(A));
수 당신은'findgroups'를 사용하여 그룹화 된 원래의 입력이 무엇인지 알려 주어 여러분의 예제에서 벡터 A를 얻습니다. –
A = findgroups (C) C = { 'CAT', 'CAT', 'CAT', 'DOG', 'DOG', 'DOG', 'CAT', 'CAT', 'DOG', 'DOG'} – Confounded