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 comentarios

Stephen23
Stephen23 el 19 de En. de 2017
@Tsz Heung: what is the rule to generate B from A ?
Tsz Heung
Tsz Heung el 19 de En. de 2017
What do you mean? My question is how can I generate B from A.
Adam
Adam el 19 de En. de 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 el 19 de En. de 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 el 19 de En. de 2017
Editada: Adam el 19 de En. de 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,...

Iniciar sesión para comentar.

 Respuesta aceptada

Stephen23
Stephen23 el 19 de En. de 2017
Editada: Stephen23 el 19 de En. de 2017

2 votos

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 comentarios

Jan
Jan el 19 de En. de 2017
+1: An excellent guess.
Tsz Heung
Tsz Heung el 19 de En. de 2017
Really Appreciated! Thank you Stephen!

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 19 de En. de 2017

1 voto

nonzeros(triu(repmat(A,1,length(A))))
Note: this assumes that none of the entries are 0.

2 comentarios

Stephen23
Stephen23 el 19 de En. de 2017
Editada: Stephen23 el 19 de En. de 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 el 19 de En. de 2017
Really Appreciated! Thank you Walter!

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 19 de En. de 2017

Comentada:

el 19 de En. de 2017

Community Treasure Hunt

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

Start Hunting!

Translated by