Repeating elements (vector)

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 Commenti

Stephen23
Stephen23 il 19 Gen 2017
@Tsz Heung: what is the rule to generate B from A ?
Tsz Heung
Tsz Heung il 19 Gen 2017
What do you mean? My question is how can I generate B from A.
Adam
Adam il 19 Gen 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
Jan il 19 Gen 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
???
Adam
Adam il 19 Gen 2017
Modificato: Adam il 19 Gen 2017
No, I meant
  • one time the first row,
  • one time the first 2 rows,
  • one time the first 3 rows,
  • one time the first 4 rows,...

Accedi per commentare.

 Risposta accettata

Stephen23
Stephen23 il 19 Gen 2017
Modificato: Stephen23 il 19 Gen 2017
There are most likely much more efficient algorithms than this:
>> N = 4;
>> X = (1:N)'*ones(1,N);
>> X(triu(true(N)))
ans =
1
1
2
1
2
3
1
2
3
4
You can use X as indices into your vector to select the values that you want.

2 Commenti

Jan
Jan il 19 Gen 2017
+1: An excellent guess.
Tsz Heung
Tsz Heung il 19 Gen 2017
Really Appreciated! Thank you Stephen!

Accedi per commentare.

Più risposte (1)

Walter Roberson
Walter Roberson il 19 Gen 2017
nonzeros(triu(repmat(A,1,length(A))))
Note: this assumes that none of the entries are 0.

2 Commenti

Stephen23
Stephen23 il 19 Gen 2017
Modificato: Stephen23 il 19 Gen 2017
+1 very nice. It would be interesting to know if repmat or multiply is faster:
nonzeros(triu((1:N)'*ones(1,N)))
Tsz Heung
Tsz Heung il 19 Gen 2017
Really Appreciated! Thank you Walter!

Accedi per commentare.

Categorie

Community Treasure Hunt

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

Start Hunting!

Translated by