2009-09-28 12 views
8

¿Cómo es que la clase Matrix no tiene métodos para editar sus vectores y componentes? Parece que todo lo que se encuentra dentro de una matriz puede leerse pero no escribirse. ¿Estoy equivocado? ¿Hay algún tipo de clase elegante de terceros Matrix que me permita eliminar filas y editarlas intencionalmente?Matrices limitadas en Ruby

Por favor, notifíqueme si no hay tal clase - Dejaré de buscar.

+0

¿Puedes explicarme qué estás haciendo? – khelll

+0

Estoy buscando 'malas' filas y columnas (que consisten completamente en ceros), y luego me gustaría eliminarlas. Ya tengo el código para hacer eso, pero escrito completamente a través de matrices. Sin embargo, estoy tratando de encontrar una solución más precisa y bonita. – gmile

Respuesta

5

El diseñador de la clase Matrix debe haber sido un entusiasta de las estructuras de datos inmutables y la programación funcional. Sí, estás en lo correcto.

En cualquier caso, hay una solución simple para lo que desea. Use Matrix para lo que puede hacer, entonces, simplemente use .to_a para obtener una matriz real.

>> Matrix.identity(2).to_a 
=> [[1, 0], [0, 1]] 

Véase también Numerical Ruby Narray. También podrías poner en parche la clase para agregar más comportamiento. Si hace esto, por favor aplique una subclase de Matrix. (Hay proyectos de bibliotecas de Ruby por ahí que quieren más comportamiento de require d clases para que los modifiquen directamente, haciendo que sus nuevos archivos sean algo tóxicos. Podrían haber simplemente parcheado una subclase o una clase singleton.)

Ah, y khelll (:-) probablemente me gustaría que dijera que posiblemente haya una manera de hacer lo que quiera in a functional style. Es decir, creando objetos nuevos en lugar de modificar los antiguos.

+0

Hmm, Ok, Tal vez tengas razón – gmile

+0

+1 por mencionar la inmutabilidad y la programación funcional, es por eso que pregunté qué quieres hacer exactamente, porque debería haber una forma de hacerlo, pero sin modificar la matriz actual. – khelll

Cuestiones relacionadas