Maxima: преобразование матрицы в список

я преобразую список в матрицу в максимумах следующим образом:

DataL : [ [1,2], [2,4], [3,6], [4,8] ];
DataM: apply('matrix,DataL);

Как сделать это по-другому ? Как преобразовать данную матрицу нибудь датам в список DataL ?

2 ответов


Я знаю, что это поздно в игре, но для чего это стоит, есть проще способ.

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

Я далек от эксперта Maxima, но с вы просили меня посмотреть на этот вопрос, вот что у меня есть после быстрого просмотра документация.

во-первых, глядя на документация на матрицы дал только один способ превратить матрицы в списки, который является list_matrix_entries. Однако, это возвращает плоский список записей. Получить иерархическую структуру список, что работает

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  */

этот неуклюж и, вероятно, неэффективен. Используя базовую структуру Lisp в Maxima (и аналогию с Mathematica, с которой я более знаком), вы можете изучить главы DataL и DataM используя часть:

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

затем для преобразования между двумя структурами вы можете использовать substpart

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

используя substpart на уровне 0 почти то же самое, что с помощью apply, за исключением того, что он работает больше, чем просто списки.