Repeating elements (vector)
Show older comments
Hi everyone,
Suppose I have matrix A
A = [1; 2; 3; 4]
And I want to have matrix B
B = [1; 1; 2; 1; 2; 3; 1; 2; 3; 4]
I don't want to use loop to do so because I have lots of observations. So how can I do this efficiently without using loop? Thank you very much!
Jeff
5 Comments
Stephen23
on 19 Jan 2017
@Tsz Heung: what is the rule to generate B from A ?
Tsz Heung
on 19 Jan 2017
Adam
on 19 Jan 2017
I assume the rule is you want just the 1st row, then the first 2 rows, then the first 3 rows, etc, all collapsed into a single vector.
Jan
on 19 Jan 2017
@Tsz Heung: There is an infinite number of methods to create B based on A from your example. To create a program, we have to know the definition of the procedure. One example is not enough to define this unequivocally.
@Adam: You mean:
- one time the first row
- one time the first 2 rows
- two times the first 3 rows
- one time the last row
???
Accepted Answer
More Answers (1)
Walter Roberson
on 19 Jan 2017
nonzeros(triu(repmat(A,1,length(A))))
Note: this assumes that none of the entries are 0.
2 Comments
+1 very nice. It would be interesting to know if repmat or multiply is faster:
nonzeros(triu((1:N)'*ones(1,N)))
Tsz Heung
on 19 Jan 2017
Categories
Find more on Creating and Concatenating Matrices 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!