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 :)

답변 (4개)

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

댓글 수: 1

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.

댓글을 달려면 로그인하십시오.

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]
A = [1 2 3 4 5 6 7]
B=bsxfun(@times,ones(4,1),A);
out=B(:)'

카테고리

도움말 센터File Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

질문:

2014년 12월 30일

댓글:

Jan
2014년 12월 31일

Community Treasure Hunt

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

Start Hunting!

Translated by