#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 )
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
comment:3 Changed 13 years ago by
Description: | modified (diff) |
---|---|
Resolution: | → fixed |
Status: | new → closed |
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
comment:4 Changed 13 years ago by
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
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.
(In [4205]) Refs #1453
Adding missed method SelectRowsFullKnown