close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 13 years ago

Closed 13 years ago

#1569 closed trick (goodtrick)

Uso de Group y BinGroup

Reported by: Pedro Gea Owned by: Víctor de Buen Remiro
Priority: normal Milestone: Mantainance
Component: Kernel Version: 3.1
Severity: normal Keywords:
Cc:

Description

El tique se abre con una intención más informativa que otra cosa.

Se constata que el uso de BinGroup y un determinado operador en el cuerpo de algunas funciones las hace mucho más ineficientes que si se usáramos la variante Group con la función correspondiente.

Por ejemplo, dado un conjunto grande de matrices:

Set matrices = For(1, 1000, Matrix (Real i) {
  Rand(200, 1, 0, 1)
});

Si deseamos concatenarlas por columnas, podemos hacer:

Real t1 = Copy(Time);
Matrix BinGroup("|", matrices);
Real t2 = Copy(Time);
Real t21 = t2 - t1; // ~ 2.8 s

que invierte unos segundos, o esta otra variante:

Real t3 = Copy(Time);
Matrix Group("ConcatColumns", matrices);
Real t4 = Copy(Time);
Real t43 = t4 - t3; // ~ 0 s

que invierte un tiempo despreciable.

Entiendo que la "ineficiencia" de BinGroup es debido a llamadas de dos en dos:

Matrix (...((m1 | m2) | m3) | m4) | ... | mN)

en lugar de una única llamada conjunta:

Matrix ConcatColumns(m1, m2, m3, m4, ..., mN);

Change History (1)

comment:1 Changed 13 years ago by Víctor de Buen Remiro

Resolution: goodtrick
Status: newclosed

Efectivamente eso es así, siempre ha sido así y siempre lo será.

Note: See TracTickets for help on using tickets.