나는 희소 색인 생성을 사용하는 코드를 가지고있다. 이 함수를 함수에서 실행하고 관련된 모든 변수의 크기가 변경되지 않는 두 가지 문제에 사용합니다. 그러나 한 가지 문제에 대해 스파 스 색인 생성 부분은 5 초가 걸리고 다른 한 부분은 25 초가 걸립니다.희소 색인 생성에 대한 세부 정보
관련된 모든 변수의 크기를 확인했는데 두 문제 모두에서 동일합니다. 또한 xv가 두 가지 문제 유형에 대한 전체 행렬임을 확인했습니다.
그래서 다른 누구도 이런 이상한 상황에 처했을까요? 이것이 일어날 이유에 대한 아이디어가 있습니까? 주로 코드를보다 효율적으로 만들려고 노력하고 있으며, 특정 응용 프로그램에 5 초가 걸리는 반면 25 초 (특히 설명 할 수없는 경우)는 매우 나쁩니다.
편집 : 다음은이 이상한 행동을 묘사하는 사진에 대한 링크입니다. 런타임 값은 세 번째 실행에서 기록되어 X의 크기도 변경되지 않도록합니다. 그리고 xv가 조밀 한 (희소하지 않은) 행렬인지 두 번 확인했습니다.
https://www.dropbox.com/s/i41j6afanzbjdyg/weird_bcd_thing.png?dl=0
덕분에 어떤 도움을 너무 많이!
아래 코드는 for 루프에서 실행됩니다. ptype = 1을 사용하면 5 초, ptype = 3은 25 초입니다.
clvec = cliques{k};
xcurr = full(X(clvec));
xv = reshape(xcurr - Z(offset_index(k) + 1 : offset_index(k) + ncl^2),ncl,ncl);
%these two functions both take a dense symmetric matrix and return a dense symmetric matrix, and in both cases the size is the same for a given k.
if ptype == 1
xv = proj_PSD(xv,0,0);
elseif ptype == 3
xv = proj_Schoenberg(xv,0);
end
Xd = vec(xv) - xcurr;
%THIS IS THE WEIRD LINE
tic
X(clvec) = xv;
toc;
가장 확실하게 일어날 수있는 그 가지고있는 색인의 수가 매우 큰 경우 'X'의 원래 크기를 넘어서는 위치에 접근하는 인덱스를 사용하여'X'에 색인을 붙이려고하는 경우에도 발생할 수 있습니다.따라서 동적으로 'X'의 크기를 확장 할 수 있으며, 따라서 문을 완료하는 데 걸리는 시간을 고려할 수 있습니다. 'ptype = 3' 일 때,'clvec'의 크기는 얼마입니까? 또한'clvec'의 최대 값 ('max (clvec (:));)과''이상한 선 "의 앞에있는'X'의 크기는 얼마입니까? – rayryeng
나는 clvec의 두 경우 모두에서 실제 값이 같은지 확인했습니다. 따라서 길이 (clvec)와 최대 값 (clvec (:))은 동일해야합니다. X의 크기도 같습니다. (나는 그들이 루프에서 자라나는 것을 의미하지만 그들은 주어진 k에 대해 동일하다.) – whyyes
OK. 'clvec'에 얼마나 많은 요소가 있습니까? – rayryeng