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]?

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)

B = kron(A,ones(1,4))
Or
B = reshape(repmat(A,4,1),1,[])

1 Comment

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.

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]

Categories

Find more on Operators and Elementary Operations in Help Center and File Exchange

Asked:

on 30 Dec 2014

Commented:

Jan
on 31 Dec 2014

Community Treasure Hunt

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

Start Hunting!