Fast way to replicate array

1 view (last 30 days)
Thang Bui
Thang Bui on 28 Apr 2015
Edited: Andrei Bobrov on 28 Apr 2015
I have a matrix W of size ExF, and I have a matrix D of size NxFxNxE where D(n,:,n,:) = W'
Is there a fast way to replicate W to form D without having to loop through N
Thanks!

Accepted Answer

Mohammad Abouali
Mohammad Abouali on 28 Apr 2015
Edited: Mohammad Abouali on 28 Apr 2015
w=[1 2; ...
3 4; ...
5 6];
N=5;
E=size(w,1);
F=size(w,2);
D=repmat(reshape(w',1,F,1,E),N,1,N,1);

More Answers (2)

Jan
Jan on 28 Apr 2015
You want to obtain W from D?
W = squeeze(D(k, :, k, :)).'
  1 Comment
Thang Bui
Thang Bui on 28 Apr 2015
Edited: Thang Bui on 28 Apr 2015
Nope, obtain D from W, the loop version looks roughly like this
D = zeros(N,F,N,E);
for n = 1:N
D(n,:,n,:) = W'; % perhaps need permute here
end

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 28 Apr 2015
Edited: Andrei Bobrov on 28 Apr 2015
i1 = bsxfun(@plus,[0;N]+1,(0:N-1)*(2*N+1));
i2 = bsxfun(@plus,i1,reshape((0:F)*i1(end),1,1,[]));
D = zeros(N,F,N,E);
D(i2) = permute(repmat(W,[1,1,N]),[2,3,1]);

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!