sweep of tensor products

Hello,
I have two matrces A of dimension c x n and B of dimension c x l with c >> n and c >> l
I would like to calculate the tensor C of dimesion c x (n x l) wht C_i,j,k = A_i_j * B_i_k
Is there a way to imrpove the following code ?
Thank you in advance,
c = 100;
n = 5;
l = 10;
A = rand(c, n);
B = rand(c, l);
C = nan([ c n l] );
for ii = 1:c
C(ii,:,:) = tensorprod(A(ii,:),B(ii,:));
end

 Accepted Answer

Strictly speaking you do not compute a tensor product.
c = 100;
n = 5;
l = 10;
A = rand(c, n);
B = rand(c, l);
C = A .* reshape(B, c, 1, l);
size(C)
ans = 1×3
100 5 10
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

3 Comments

Thank you. It is neat and much quicker.
Strictly speaking you do not compute a tensor product.
It is essentially, a Khatri-Rao product.
Actually, my original intent is to calculate this (Einstein notation)
C_j,k,l = A_i,j * B_i,k * C_i,l
I calculated first B_i,k * C_i,l and then proceeded to a tensor product.

Sign in to comment.

More Answers (0)

Categories

Find more on Linear Algebra in Help Center and File Exchange

Products

Release

R2024a

Tags

Asked:

on 5 Nov 2024

Commented:

on 6 Nov 2024

Community Treasure Hunt

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

Start Hunting!