3d Matrix - Extract Subarray and Multiply by Conjugate Transpose without Forloops

3 ビュー (過去 30 日間)
I have a 3d matrix A(i,j,k) of size [1:100,1:10000,1:989]. On the kth index I want to extract the 989 elements into a vector u and form the product u*ctranspose(u), for each of the indices.
Using a double for loop, which is not something one should do in Matlab,
% this is an evil double for loop - I want to avoid doing this.
for ii=1:100
for jj=1:10000
u=squeeze(A(ii,jj,:));
% somehow compute and store uu in a vectorized way, but how?
uu=u*ctranspose(u); % note that uu is a 989x989 matrix, not a vector.
end %ii
end %jj
This would be really slow. Is there a vectorized way to the above, so I am not doing a double for loop?
  17 件のコメント
Matt J
Matt J 2022 年 9 月 8 日
Probably, but you haven't explained what t and r are.
Science Machine
Science Machine 2022 年 9 月 8 日
編集済み: Science Machine 2022 年 9 月 8 日
t and ras parameters are the ii and jj indices from above u of size 1:100 and 1:10000, and the vector $$ has parameters jj also.

サインインしてコメントする。

採用された回答

Matt J
Matt J 2022 年 9 月 7 日
編集済み: Matt J 2022 年 9 月 7 日
[m,n,p]=size(A);
Ar=reshape(A,[],p).';
UU = reshape(Ar,p,1,[]).*conj(reshape(Ar,1,p,[]));
UU=reshape(UU,p,p,m,n); %obtain the (i,j)-th outer product as UU(:,:,i,j)
  3 件のコメント
Matt J
Matt J 2022 年 9 月 7 日
編集済み: Matt J 2022 年 9 月 7 日
A typo. I fixed it.
Science Machine
Science Machine 2022 年 9 月 7 日
How did you learn to do such things? I knew reshape function but it did not occur to me to use it here.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCorrelation and Convolution についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by