How to reshape and repeat at the same time.

2 views (last 30 days)
Hi guys, I have the following data
data= [1 3 7 9 2 5]
and I want the data to be as a matrix (2*6)
newdata=1 1 7 7 2 2
3 3 9 9 5 5
Please help me, and thanks in advance.

Accepted Answer

Walter Roberson
Walter Roberson on 2 Jan 2017
num_rows = 2;
num_copies = 2;
new_data = kron(reshape(data, num_rows, []), ones(1, num_copies));
Or less verbosely,
new_data = kron(reshape(data,2,[]),ones(1,2));
  5 Comments
Walter Roberson
Walter Roberson on 5 Jan 2017
finaldata = reshape( permute(reshape(new_data, 2, 2, []), [2 1 3]), 1, [] );
Bahaa Algebory
Bahaa Algebory on 5 Jan 2017
Thanks Walter, your answer is awesome, and it is very useful.

Sign in to comment.

More Answers (1)

Roger Stafford
Roger Stafford on 2 Jan 2017
newdata = reshape(repmat(reshape(data,2,[]),2,1),2,[]);
  3 Comments
Roger Stafford
Roger Stafford on 5 Jan 2017
It is much easier to get ‘finaldata’ directly from ‘data’:
finaldata = reshape(repmat(data,2,1),1,[]);
Bahaa Algebory
Bahaa Algebory on 5 Jan 2017
Edited: Bahaa Algebory on 5 Jan 2017
Thanks Roger. You are right, it is easier to get "finaldata" directly from "data". But I do not want to do this. Actually, I have qpsk data, so I want to separate them into two streams. Then, I will add a noise. At the end, I will combine these two streams. So, that is why I want to get the "finaldata" from the matrix "newdata".
% newdata= 1 1 7 7 2 2
3 3 9 9 5 5
I want to convert the above matrix to the following vector
finaldata= 1 1 3 3 7 7 9 9 2 2 5 5
I hope you get my point.

Sign in to comment.

Categories

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