문제

MATLAB의 3 * (큰 숫자) 매트릭스의 각 컬럼에서 크기 3 벡터를 artriact로 찾으려고 노력하고 있습니다.물론 나는 루프를 사용할 수 있지만, 나는 더 효율적인 솔루션을 찾으려고 노력하고있다.오, 나는 그것을 사용하기에 충분한 기억이 없기 때문에 repmat을 사용할 수 없습니다 (또 다른 3 * (큰 숫자) 매트릭스를 만드는 것처럼) ...

이이 가능합니까?

도움이 되었습니까?

해결책

루프는 relinchletters/news_not/may03/profiler"> relinchlets/news_not/may03/profiler">- 시간 가속 (JITA) .대부분의 경우 현재 MATLAB 버전의 루프가있는 솔루션이 복잡한 것보다 많이 더 빠릅니다.

bsxfun 트릭 그러나 내 경험에서는 메모리 문제가 있지만 repmat보다 덜 경향이 있습니다.

그래서 구문은 다음과 같습니다 :

AA = bsxfun(@minus,A,b) 여기서 b는 벡터이고 A는 큰 매트릭스

입니다.

하지만 Loopy 버전을 프로파일로 프로파일로 촉구하고 결정하십시오!대부분의 경우 메모리 제약으로 인해 선택 사항이 없을 수도 있습니다.)

다른 팁

다른 답변은 비트가 비록 - MATLAB R2016B가 표준 기능으로 방송 추가 질문과 일치하는 블로그 게시물의 예 :

>> A = ones(2) + [1 5]'
A =
     2     2
     6     6
.

이 코드가 코드를 가속화할지 모르지만 벡터에서 스칼라의 뺄셈에는 메모리 문제가 없습니다.매트릭스 크기가 너무 비대칭이기 때문에 짧은 차원의 FOR-LOOP의 오버 헤드는 무시할 수 있습니다.

어쩌면

matout = matin;
for j = 1:size(matin, 1) %3 in this case
     matout(j,:) = matin(j,:) - vec_to_subtract(j);
end
.

물론이 작업을 수행 할 수 있지만 원래의 매트릭스를 보존하고 싶은지 알지 못했습니다.

실제로, http://www.frontiernet.net/~dmschwarz/genops.html (mex 파일로 오버로드하는 운영자 오버로드) 아직 테스트하지 않았지만 트릭을 수행합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top