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 件のコメント

José-Luis
José-Luis 2014 年 5 月 29 日
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.
f10w
f10w 2014 年 5 月 30 日
Hmm, because using a loop is slow in general (but I may be wrong :P).

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

 採用された回答

Andrei Bobrov
Andrei Bobrov 2014 年 5 月 29 日

1 投票

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

1 件のコメント

f10w
f10w 2014 年 5 月 30 日
Thanks, Andrei. That answers my question.

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

その他の回答 (0 件)

カテゴリ

質問済み:

2014 年 5 月 29 日

コメント済み:

2014 年 5 月 30 日

Community Treasure Hunt

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

Start Hunting!

Translated by