Vectorization for Two Nested for-loops
조회 수: 5 (최근 30일)
이전 댓글 표시
Hello all,
I'm trying to vectorize some operation between two 2D matrices, A and B. Basically, the process is multiplying every row verctor from matrix B by every vector from matrix A and store the value in matrix C. The correct non-vectorized code looks as follows:
A = [2 3 4; 5 2 1; 1 4 3];
B = [3 4 4; 4 2 1; 4 4 1];
C = zeros(3,3); % Initializing C
for ii=1:size(A,1)
for jj=1:size(B,1)
AA = A(ii,:);
BB = transpose(B(jj,:));
C(jj,ii) = sum(BB*AA, 'all')
end
end
C
The resultant C should looks as:
C =
99 88 88
63 56 56
81 72 72
Can I get help here?
Thanks!
댓글 수: 0
답변 (2개)
Tomoaki Takagi
2024년 7월 1일
Try:
A = [2 3 4; 5 2 1; 1 4 3];
B = [3 4 4; 4 2 1; 4 4 1];
C = repmat(A,3).*repelem(B,3,3);
C = reshape(sum(C,2),3,3)'
댓글 수: 0
Stephen23
2024년 7월 1일
편집: Stephen23
2024년 7월 1일
Without creating multiple copies of data in memory:
A = [2 3 4; 5 2 1; 1 4 3];
B = [3 4 4; 4 2 1; 4 4 1];
C = sum(permute(A,[3,1,2,4]).*permute(B,[1,3,4,2]),3:4)
The same basic approach, more verbose but possibly more efficient:
As = size(A);
Bs = size(B);
C = sum(reshape(A,[1,As]).*reshape(B,[Bs(1),1,1,Bs(2)]),3:4)
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!