두 개의 5000 x 1000 행렬 A와 B가 있다고 가정하십시오. 옥타브는 trace(A*B')
을 효율적으로 계산합니다. 즉, 대부분이 사용되지 않는 5000 * 5000 내부 제품과 비교하여 5000 개의 내부 제품 만 필요합니다.옥타브 : trace() 사용의 효율성?
그리고 trace
에 대한 인수가 더 복잡하다면, 즉 : trace(A*B' + C*D')
? 그게 아무것도 바뀌 었습니까?
두 개의 5000 x 1000 행렬 A와 B가 있다고 가정하십시오. 옥타브는 trace(A*B')
을 효율적으로 계산합니다. 즉, 대부분이 사용되지 않는 5000 * 5000 내부 제품과 비교하여 5000 개의 내부 제품 만 필요합니다.옥타브 : trace() 사용의 효율성?
그리고 trace
에 대한 인수가 더 복잡하다면, 즉 : trace(A*B' + C*D')
? 그게 아무것도 바뀌 었습니까?
trace(A*B')
trace()
을 사용하기 전에 전체 매트릭스 제품을 계산합니다.
보다 효율적인 방법은 sum(sum(A.*conj(B),2))
입니다. 내부 합계는 결과 행렬의 diagonal을 계산합니다.
아마 더 효율적인 접근법은`sum ((A. * conj (B)) (:))를 통해 한 단계에서 두 합계를 수행하는 것입니다.
trace(A*B' + C*D')
은 sum((A.*conj(B) + C.*conj(D))(:))
에 의해 효율적으로 계산됩니다.
아니요, 제품은 trace() 호출 전에 평가됩니다. 하나의 효율적인 구현은 그 행렬 곱셈의 대각 항만을 수동으로 계산 한 다음 두 번째 예제에 대해
두 개를 모두 단축 할 수 있으며 가독성을 잃을 수도 있습니다. Matlab 호환성은 다음과 같습니다. sum((diag(A) .* diag(B))(:));