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);
Efectivamente eso es así, siempre ha sido así y siempre lo será.