아직 MATLAB의 고급 기능을 배우고 있습니다.MATLAB의 다른 모든 행을 합계하는 방법
저는 2D 행렬을 가지고 있고 i를 제외하고 모든 행을 합산하려고합니다. 예를 들어
1 1 1
2 2 2
4 4 4
내가 = 2, 나는이 얻을 싶은 말 :
5 5 5
그때 행에게 난을 뺀 모든 행을 합산하여 그것을 할 수 있습니다,하지만 난 알고 싶어 MATLAB의 인덱싱/선택 구문을 사용하는 것이 더 빠릅니다.
아직 MATLAB의 고급 기능을 배우고 있습니다.MATLAB의 다른 모든 행을 합계하는 방법
저는 2D 행렬을 가지고 있고 i를 제외하고 모든 행을 합산하려고합니다. 예를 들어
1 1 1
2 2 2
4 4 4
내가 = 2, 나는이 얻을 싶은 말 :
5 5 5
그때 행에게 난을 뺀 모든 행을 합산하여 그것을 할 수 있습니다,하지만 난 알고 싶어 MATLAB의 인덱싱/선택 구문을 사용하는 것이 더 빠릅니다.
글쎄, 당신이 이런 식으로 그것을 할 수 :
>> A = [ 1 1 1
2 2 2
4 4 4];
>> n = 2;
>> sum(A([1:n-1 n+1:end], :))
ans =
5 5 5
을하지만, 네이트 이미 표시된 것처럼, 그것은 보일 수 있습니다처럼 좋은, 실제로는 훨씬 느린 그냥에 대해 조언을 하나의 행을 뺀 이상입니다 그것을 사용 :
모든 행을 합산 한 후 행을 난을 뺀 것 같다, 훨씬 빠른 힘든 :
A=rand(500);
n = randi(500);
tic
for i=1:1e3
%sum(A([1:n-1 n+1:end], :));
sum(A)-A(n,:);
end
toc
Elapsed time is 0.162987 seconds.
A=rand(500);
n = randi(500);
tic
for i=1:1e3
sum(A([1:n-1 n+1:end], :));
end
toc
Elapsed time is 1.386113 seconds.
당신은 꽤 빠른 컴퓨터를 가지고 있습니다. 뭐라구? 나는 2.8GHz의 i7을 가지고 있고, 나의 결과는 너의 것보다 4 배 느리다. – angainor
이전 저자의 성능 고려 사항에 추가하려면. 두 번째 방법의 복잡한 행렬 인덱싱을 사용하지 않기 때문에 nate에 의한 솔루션이 빠릅니다. 복잡한 행렬/벡터 인덱싱 is very inefficient in MATLAB. 이 질문은 인용 된 질문에서 설명한 것과 동일한 색인 생성 문제입니다.
이전 프레임 워크 다음, 다음과 같은 간단한 테스트를 고려 : 그것은 참으로 빠른
A=rand(500);
n = randi(500);
tic
for i=1:1e3
B=sum(A(:, :));
end
toc
Elapsed time is 0.747704 seconds.
tic
for i=1:1e3
B=sum(A(1:end, :));
end
toc
Elapsed time is 5.476109 seconds. % What ???!!!
tic
id = [1:n-1 n+1:500];
for i=1:1e3
B=sum(A(id, :));
end
toc
Elapsed time is 5.449064 seconds.
입니까? 'sum (A) -A (n, :)'는 내 컴퓨터에서 훨씬 빠릅니다. – bla
@nate : 예, 맞습니다. 나는 그것을 편집 할 것입니다. –
@nate : hmmm ... 이제 왜 그렇게 될까요? * 훨씬 느립니다. 인덱스의 생성을 해제하더라도 ... –