에서 "매트릭스 목록"I는 동일 다음 행렬효율적인 매트릭스 곱셈 MATLAB
N
의 처음 두 인덱스가 행과 열의 수있다
M(i,j)=sum_(k,l) c(k,l) kron(N(:,:,k),N(:,:,l))
을 (계산하고자 이 경우) 마지막 인덱스는 행렬이 N
이고 행렬 c
이 계수의 행렬임을 나타냅니다. 인덱스 k
및 l
은 1에서 50까지 실행됩니다 (필자의 경우).
내가에 합을 절단한다는 말 : 그런 일이 왜 알아낼 수 없습니다이 코드 몇 가지 재미있는 것은이 있습니다
c=randn(50,50);
N=randn(26,26,50);
M=zeros(size(N,1)^2);
for k=1:size(N,3)
for l=1:size(N,3)
M=M+c(k,l).*kron(N(:,:,k),N(:,:,l));
end
end
:
이렇게하려면, 나는 다음과 같은 알고리즘을 구현 한 예를 들어, 유한 번호 n
까지 k
. k
이 1에서 n
으로 바뀌고 1에서 n+1
으로 갈 때 계산 사이의 시간차는 k=n+1
으로 색인 된 행렬을 계산하는 데 걸리는 시간보다 훨씬 높습니다 (약 정도). 총 행렬은 k=n
까지 계산됩니다.
제 질문은 : 제가 찾고있는 매트릭스를보다 효율적으로 계산할 수있는 방법이 있습니까? 그리고이 알고리즘에 어떤 문제가 있습니까?
대단히 감사합니다.
'제로 (n)'차원 nxn의 2D 정사각형 행렬을 만듭니다. 따라서 예제에서 M, 2D 행렬을 만들지 만'M (:, :, k)'를 사용하여 세 번째 차원에 액세스하려고 시도하십시오 – obchardon
@ obchardon 그 코드에 오타가 있었는지 확실히 알았습니다. Alex - 내 편집을 확인하십시오. – Brick
@Alex 귀하의 수식이 귀하의 코드와 정확하게 일치하지 않습니다. 먼저, 위의 코드가 올바른 예상 출력을 생성하는지 확인할 수 있습니까? 그런 다음에야 그 루프를 최적화/벡터화하는 것에 대해 생각해야합니다. – Amro