Multiply two 3D arrays that result would be 4D

조회 수: 1 (최근 30일)
Mantas Vaitonis
Mantas Vaitonis 2018년 7월 13일
댓글: Mantas Vaitonis 2018년 7월 13일
Hello to All,
I am trying to work and understand 4D arrays. Lets say I have two 3D gpuArrays a(100x5x5) and b(5x5x5). I would like to multiply them that it would result in 4D array c(100x5x5x5), and example of multiplication:
For j=1:5
For i=1:5
c(:,:,i,j)=a(:,i,j)*b(i,:,j)
end
end
What would be the way to achieve this. I am trying to go for 4D arrays, because I would like to avoid for loops.
  댓글 수: 2
James Tursa
James Tursa 2018년 7월 13일
a(:,i,j) is a 100x1. b(i,:,j) is a 1x5. So the result of a matrix multiply is going to be a 100x5. This would mean you need c(:,:,i,j) instead of c(:,i,j) on the lhs. Is this what you want to do?
Mantas Vaitonis
Mantas Vaitonis 2018년 7월 13일
@James Tursa, yes you are correct, c suppose to be c(:,:,i,j), I fixed my comment. Thank You for noticing.

댓글을 달려면 로그인하십시오.

채택된 답변

James Tursa
James Tursa 2018년 7월 13일
Assuming I understand what you are trying to do,
result = permute(a,[1 4 2 3]) .* permute(b,[4 2 1 3]);
or in earlier versions of MATLAB
result = bsxfun(@times,permute(a,[1 4 2 3]) , permute(b,[4 2 1 3]));
  댓글 수: 1
Mantas Vaitonis
Mantas Vaitonis 2018년 7월 13일
Yes this is exactly what I need. Thank You and you guys always give such great and fast responses. Now I can move forward.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Matt J
Matt J 2018년 7월 13일
c=a.*permute(b,[4,1,3,2]);

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by