How to extend a array by multiplying internal values e.g. [1 2 3 4] to [1 1 1 2 2 2 3 3 3 4 4 4]?

3 views (last 30 days)
How can I extend this array:
A = [1 2 3 4 5 6 7]
So that a new array can be formed in which each value of array A appears 4 times, and the array keeps its order? E.g. for array A the result would be:
B = [1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7]
Thanks for any advice :)

Answers (4)

Roger Stafford
Roger Stafford on 30 Dec 2014
Edited: Roger Stafford on 31 Dec 2014
B = A(ceil((1:4*size(A,2))/4)); % <--- Corrected

Sean de Wolski
Sean de Wolski on 30 Dec 2014
B = kron(A,ones(1,4))
Or
B = reshape(repmat(A,4,1),1,[])
  1 Comment
Jan
Jan on 31 Dec 2014
According to the definition of the problem kron() is the direct solution in a mathematical manner. From the view point of a software engineer, the numerical multiplication is an indirection here and repmat avoids them. Therefore I prefer both solutions.

Sign in to comment.


Stephen23
Stephen23 on 30 Dec 2014
I don't know how this compares for speed, but it gets the desired result using some basic MATLAB matrix multiplication:
>> A = [1 2 3 4 5 6 7];
>> B = [1;1;1;1] * A;
>> B = B(:).'
ans = [1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7]

Azzi Abdelmalek
Azzi Abdelmalek on 30 Dec 2014
A = [1 2 3 4 5 6 7]
B=bsxfun(@times,ones(4,1),A);
out=B(:)'

Categories

Find more on Multidimensional Arrays 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!