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

Last modified 13 years ago

#1453 closed doubt (fixed)

Select en matrices

Reported by: imendez Owned by: Víctor de Buen Remiro
Priority: high Milestone: Mantainance
Component: Kernel Version: 3.1
Severity: normal Keywords:
Cc: atorre@…, optcob.banamx@…

Description (last modified by Víctor de Buen Remiro)

Hola,

Tengo una matriz colmuna que tiene omitidos. Me gustaría reducir la dimensión de esa matriz quedándome con las filas cuyo dato no es omitido. ¿Lo debo hacer con el paquete MatQuery? ¿Con qué función?

Más en general, ¿existe una función similar al Select de Set en ese paquete? Me refiero a que permita definir una condición de tipo Real para seleccionar los elementos.

Gracias.
Un saludo.

Change History (5)

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

(In [4205]) Refs #1453
Adding missed method SelectRowsFullKnown

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

(In [4206]) Refs #1453

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

Description: modified (diff)
Resolution: fixed
Status: newclosed

Efectivamente ese es el paquete que se ocupa de esas cosas, en particular, se precisa la versión MatQuery.3.4 para seleccionar datos no omitidos tal y como se ve en este ejemplo:

#Require MatQuery;

//Genero una matriz con un porcentage aproximado del 20% de omitidos
Real N = 100;
Matrix M = IfMat(LE(Rand(N,1,0,1),0.2),?,Rand(N,1,-10,10));
//Calculo los indices de filas con datos no omitidos
Set selKnown = MatQuery::SelectRowsFullKnown(Mat2VMat(M));
//Extraigo las filas con datos no omitidos
Matrix M.known = SubRow(M,selKnown);

Obsérvese que el paquete está diseñado para operar sobre VMatrix por lo que si se tiene una Matrix hay que convertirla primeo con Mat2VMat.

Para seleccionar las filas con un valor concreto se usaría MatQuery::SelectRowsWithValue y hay otros métodos de selección específicos para un conjunto de valores, para un rango, para un entorno hiperesférico o hipercúbico, etc.

Lo más sencillo es explorar el paquete en TolBase y mirar las descripciones en el inspector de objetos como en esta imagen

source:/tolp/trunk/tol_tests/tol/Bugzilla/bug_001453/MatQuery.Methods.png

comment:4 Changed 13 years ago by Alfredo Torre

Este paquete está genial pero sería más cómodo si admitiera Matrix directamente... creo que puede ser una mejora para futuras versiones.

Saludos

PS: Parece que se ha impuesto el Español en tol-project...

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

Está programado sobre VMatrix porque es mucho más eficiente. En funciones internas escritas en C++ es relativamente sencillo soportar varios tipos de datos en una misma función, pero en código escrito en TOL la cosa se complica. Para admitir Matrix directamente habría que hacer control de tipos manual, lo cual baja la eficiencia y la robustez en tiempo de ejecución, o duplicar todas las funciones lo cual lleva bastante curre y lo emborrona todo. En ningún caso se aporta nada nuevo con ello pues internamente habría que llamar a Mat2VMat y VMat2Mat. No veo el problema de usar esas funciones de conversión. Si hace falta se crean variables auxiliares, por claridad expositiva o porque se puedan reutilizar, y si no se usan en línea que no pasa nada.

PS: Los tickets se pueden escribir en el idioma que uno quiera: otra cosa es lo que te entienda luego el que se encargue de él y como sepa contestarte.

Note: See TracTickets for help on using tickets.