Extend a matrix by extending its vectors

I have an d*m*n matrix A (interpretation: for each n, there are m vectors of dimension d). I would like to extend each d-dimensional vector as follows:
Consider a vector of dimension d: (1,2,...,d) (it's (x_1,x_2,...,x_n) but I removed the 'x_' for simplicity). The goal is to extend v to obtain a d*d vector of the form:
(1,1,...,1,2,...,2,...,d,d,...,d)
There are several ways to extend a single vector, as already suggested here. Suppose that a function called 'extend' does that job. Then, to extend every vector in the matrix A, we can do:
B = zeros(d*d,m,n);
for i = 1:n
for j = 1:m
B(:,j,i) = extend(A(:,j,i);
end
end
However, this is quite slow because of the loop. Could anybody please suggest me a fast way to do that?
Thank you in advance for your help.

2 Commenti

What makes you thing it's slow because of the loop? Not all loops are evil. It would depend on what your extend() function looks like.
Hmm, because using a loop is slow in general (but I may be wrong :P).

Accedi per commentare.

 Risposta accettata

B = A(kron((1:d)',ones(d,1)),:,:);

Più risposte (0)

Richiesto:

il 29 Mag 2014

Commentato:

il 30 Mag 2014

Community Treasure Hunt

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

Start Hunting!

Translated by