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
, за исключением того, что он работает больше, чем просто списки.