Extend a matrix by extending its vectors

2 次查看(过去 30 天)
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
B = A(kron((1:d)',ones(d,1)),:,:);

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by