2011-12-31 25 views

Respuesta

14

Sé que es tarde en el juego, pero por lo que vale, hay una manera más simple.

my_matrix : matrix ([a, b, c], [d, e, f]); 
my_list : args (my_matrix); 
=> [[a, b, c], [d, e, f]] 
+0

Gracias. Parece funcionar :-). –

+1

@Grzegorz Puede mover la marca de verificación a la respuesta de Robert, ya que parece ser la forma más razonable de hacer las cosas. – Simon

+1

@Simon Fair point - Acabo de hacerlo. Sin embargo, no puedo recordar por qué, porque escribía secuencias de comandos de Maxima más largas, en mi caso su solución funcionó mejor o fue más conveniente. De todos modos - tic movido. Gracias a los dos por su ayuda, ¡Salud! –

6

Estoy lejos de ser un experto en Maxima, pero desde you asked me to look at this question, esto es lo que tengo después de un rápido vistazo al documentation.

En primer lugar, mirar documentation on matrices dio como resultado una sola forma de convertir matrices en listas, que es list_matrix_entries. Sin embargo, esto devuelve una lista plana de las entradas. Para obtener una estructura de lista anidada, algo como los siguientes trabajos

DataL : [[1, 2], [2, 4], [3, 6], [4, 8]]; /* Using your example list */ 
DataM : apply('matrix, DataL);    /* and matrix    */ 

DataML : makelist(list_matrix_entries(row(DataM, i)), i, 1, 4); 
is(DataML = DataL); /* true */ 

Esto es torpe y probablemente ineficaz. Usando la estructura subyacente Lisp en Maxima (y analogía con Mathematica, que estoy más familiarizado) puede examinar los jefes de DataLDataM y utilizando part:

part(DataL, 0); /* [  */ 
part(DataM, 0); /* matrix */ 

continuación para convertir entre las dos estructuras, que pueden utilizar substpart

is(substpart(matrix, DataL, 0) = DataM); /* true */ 
is(substpart("[", DataM, 0) = DataL); /* true */ 

usando substpart a nivel 0 es casi lo mismo que usar apply, excepto que trabaja en algo más que en una lista.

+0

Gracias @Simon. Tu solución funciona genial He estado caminando hacia adelante y hacia atrás la documentación sin éxito. Como uso el método de mínimos cuadrados y pocos otros que operan en diferentes tipos (algunos restringen a la matriz, mientras que otros operan en listas), la conversión bidireccional es de gran ayuda. –