나는 matlab에 n 차원의 대표 벡터를 가지고있다. 나는 한 세트의 훈련 벡터에서 벡터를 근접성을 기반으로 한 대표 벡터로 대표되는 그룹으로 그룹화해야한다. 어떻게해야합니까?matlab에서 주어진 벡터에 가장 가까운 벡터를 찾는 방법은 무엇입니까?
0
A
답변
4
dsearchn
을 사용하면 각 지점에 가장 가까운 대표자를 찾을 수 있습니다. 우선 삼각 측량 행렬을 포함하지 않는 버전을 사용하는 것이 좋습니다. 메모리 또는 CPU 성능이 충분하지 않은 경우 삼각 측량에 대해 살펴보십시오.
1
nif 차원 벡터에 의한 IIF 당신은 n 차원 점의 정렬 된 목록을 의미합니다 (즉, 당신이 원하는 것에 대한 나의 이해입니다). 그런 다음 평균 가까운 거리를 사용하여 이것을 수행했습니다. 기본적으로 벡터 1의 각 점에 대해 벡터 2의 점까지의 최소 거리를 찾습니다. 두 벡터 사이의 거리는이 모든 거리의 평균입니다. 그러나 이것은 대칭이 아니므로 벡터 2의 각 점에 대해 벡터 1에 대한 최소 거리를 구한 다음 동일한 최소, 최대 또는 평균 등 두 가지 평균을 구해야합니다.
여기에 있습니다 루프를 사용하여 만든 일부 코드 (3D 벡터 용) :
function mcd = MCD(fiber1, fiber2, option)
%
%remove NaNs
fiber1(find(isnan(fiber1),1):length(fiber1),:) = [];
fiber2(find(isnan(fiber2),1):length(fiber2),:) = [];
dist = 0;
for k = 1:length(fiber1)
D = [];
for j = 1:length(fiber2)
D = [D distance(fiber1(k,:),fiber2(j,:))];
end;
dist = dist + min(D);
end;
mcd = dist/length(fiber1);
if nargin > 2
dist = 0;
for k = 1:length(fiber2)
D = [];
for j = 1:length(fiber1)
D = [D distance(fiber2(k,:),fiber1(j,:))];
end;
dist = dist + min(D);
end;
mcd2 = dist/length(fiber2);
if strcmp(option,'mean')
mcd = mean([mcd mcd2]);
elseif strcmp(option,'min')
mcd = min([mcd mcd2]);
end;
end;
그러나 이것은 나에게 너무 느리다. 그래서 여기에 매우 빠른입니다 벡터화 (하지만 어려운 따라) 버전 : 이것은 위의 사용 거리() 함수는
function mcd = MCD(fiber1, fiber2, option, sampling)
%MCD(fiber1, fiber2)
%MCD(fiber1, fiber2, option)
%MCD(fiber1, fiber2, option, sampling)
%remove NaNs
fiber1(find(isnan(fiber1),1):length(fiber1),:) = [];
fiber2(find(isnan(fiber2),1):length(fiber2),:) = [];
%sample the fibers for speed. Each fiber is represented by "sampling"
%number of points.
if nargin == 4
freq = round(length(fiber1)/sampling);
fiber1 = fiber1(1:freq:length(fiber1),:);
freq = round(length(fiber2)/sampling);
fiber2 = fiber2(1:freq:length(fiber2),:);
end;
%reshape to optimize the use of distance() for speed
FIBER2 = reshape(fiber2',[1,3,length(fiber2)]);
FIBER1 = reshape(fiber1',[1,3,length(fiber1)]); %this is only used in the symmetrical case, i.e when 'min' or 'mean' option is called
%reshape amd tile filber 1 so as to eliminate the need for two nested for
%loops thus greatly increasing the computational efficiency. The goal is to
%have a 4D matrix with 1 row and 3 columns. Dimension 3 is a smearing of
%these columns to be as long as fiber2 so that each vector (1x3) in fiber1
%can be placed "on top" as in a row above the whole of fiber2. Thus dim 3
%is as long as fiber2 and dim 4 is as long as fiber1.
fiber1 = reshape(fiber1',[1,3,length(fiber1)]); %1x3xF1
fiber1 = repmat(fiber1,[length(FIBER2),1,1]); %F2x3xF1
fiber1 = permute(fiber1,[2,1,3]); %3xF2xF1
fiber1 = reshape(fiber1,[1,3,length(FIBER2),length(FIBER1)]);%1,3,F2,F1
mcd = mean(min(distance(fiber1, repmat(FIBER2,[1,1,1,length(FIBER1)]))));
if nargin > 2
fiber2 = reshape(fiber2',[1,3,length(fiber2)]); %1x3xF1
fiber2 = repmat(fiber2,[length(FIBER1),1,1]); %F2x3xF1
fiber2 = permute(fiber2,[2,1,3]); %3xF2xF1
fiber2 = reshape(fiber2,[1,3,length(FIBER1),length(FIBER2)]);%1,3,F2,F1
mcd2 = mean(min(distance(fiber2, repmat(FIBER1,[1,1,1,length(FIBER2)]))));
if strcmp(option,'mean')
mcd = mean([mcd mcd2]);
elseif strcmp(option,'min')
mcd = min([mcd mcd2]);
end;
end;
, 내 경우에는 내가 유클리드 거리를 사용하지만 당신은 그것을 적용 할 수 있습니다 두 벡터를 받아 들일 수있는 한 무엇이든 최선을 다하겠습니다.
function Edist = distance(vector1,vector2)
%distance(vector1,vector2)
%
%provides the Euclidean distance between two input vectors. Vector1 and
%vector2 must be row vectors of the same length. The number of elements in
%each vector is the dimnesionality thereof.
Edist = sqrt(sum((diff([vector1;vector2])).^2));
관련 문제
- 1. 가장 가까운 벡터를 찾는 알고리즘
- 2. 주어진 입력에 가장 가까운 2^N 값을 찾는 방법은 무엇입니까?
- 3. 주어진 반경에서 가장 가까운 도시를 찾는 방법은 무엇입니까?
- 4. 가장 가까운 벡터를 찾으십시오
- 5. POSTGIS에서 가장 가까운 지점을 찾는 방법은 무엇입니까?
- 6. MySQL에서 가장 가까운 정수를 찾는 가장 효율적인 방법은 무엇입니까?
- 7. Matlab에서 쌍 거리와 가장 가까운 이웃을 계산하는 빠른 방법은 무엇입니까?
- 8. 주어진 포인트에 가장 가까운 점을 파이썬에서 찾는 가장 빠른 방법
- 9. MySQL에서 가장 가까운 (시간 현명한) 항목을 주어진 날짜 또는 연도와 월에만 주어진 날짜에 찾는 방법은 무엇입니까?
- 10. 주어진 int에 가장 가까운 짝수를 찾는 방법은 무엇입니까? (주어진 11 반환 12)
- 11. 벡터를 다차원 벡터에 삽입하는 방법은 무엇입니까?
- 12. Matlab에서 지정된 인덱스에 가장 가까운 인덱스를 찾는 방법
- 13. 위치에 가장 가까운 비 충돌 사각형을 찾는 효과적인 방법은 무엇입니까
- 14. 주어진 점에 가장 가까운 점
- 15. 벡터를 MATLAB에서 프레임으로 나누는 방법은 무엇입니까?
- 16. MATLAB에서 벡터를 여러 번 할당하는 방법은 무엇입니까?
- 17. Matlab에서 열 벡터를 반복하는 방법은 무엇입니까?
- 18. Matlab에서 다른 벡터를 참조하여 벡터를 분할하는 방법은 무엇입니까?
- 19. 주어진 위치에 가장 가까운 도시 찾기
- 20. 주어진 점에 가장 가까운 점을 다각형으로 얻는 방법은 무엇입니까?
- 21. GeoIP 가장 가까운 국가 (가장 가까운 국가)
- 22. 한 유형의 벡터를 다른 유형의 벡터에 지정
- 23. MatLAB에서 배열에 가장 가까운 값을 얻으시겠습니까?
- 24. as3 : Box2d 가장 가까운 시체를 찾는 방법
- 25. jquery : 가장 가까운 두 번째 anscestor를 찾는 방법은 무엇입니까?
- 26. 유닉스 타임 스탬프 이외에 가장 가까운 월요일을 찾는 방법은 무엇입니까?
- 27. jQuery에서 가장 가까운 자손 (셀렉터와 일치하는)을 찾는 방법은 무엇입니까?
- 28. 가장 가까운 비 중첩 요소까지의 거리를 찾는 방법은 무엇입니까?
- 29. 문자열에서 가장 가까운 링크/URL을 찾는 방법은 무엇입니까? (PHP)
- 30. 위도와 경도를 사용하여 가장 가까운 매장을 찾는 방법은 무엇입니까?