Используя Maxima, как я могу объединить два списка в один вложенный список? - PullRequest
1 голос
/ 03 февраля 2020

У меня есть один список значений x и другой для значений y. Я хотел бы, чтобы они были расположены в матрице из 2 столбцов или во вложенном списке (который я могу легко превратить в матрицу). В Mathematica это выполняется с помощью Thread [x-values, y-values], но я не могу найти аналогичной функции Maxima.

Я начинаю с этих двух списков,

Tx:[1,2,3,4,5,6,7,8,9,10];

Ty:[86,85,84,89,85,89,87,85,82,85];

и вручную сделать это,

ListT: [[1,86],[2,85],[3,84],[4,89],[5,85],[6,89],[7,87],[8,85],[9,82],[10,85]];

, чтобы я мог создать матрицу, используя

MatrixT: apply('matrix,ListT);

Есть ли «быстрый» способ сделать это, потому что мой реальный набор данных содержит сотни данных точки, которые приходят ко мне таким образом .?

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Я думаю, что простой способ сделать это - создать матрицу, которая имеет 2 строки и много столбцов, а затем транспонировать ее в 2 столбца и множество строк:

MatrixT: transpose (matrix (Tx, Ty));

Есть как минимум две другие я могу думать о:

ListT: map (lambda ([a, b], [a, b]), Tx, Ty);
MatrixT: apply (matrix, ListT);

и

ListT: makelist ([Tx[i], Ty[i]], i, 1, length(Tx));
MatrixT: apply (matrix, ListT);

Я использую transpose довольно часто для go назад и вперед между переменными, ориентированными на строки и столбцы. Например, предположим, у вас есть mymatrix3 с 3 столбцами, и вы хотите, чтобы переменные X, Y и Z были назначены столбцам. Вы можете сказать

[X, Y, Z]: args (transpose (mymatrix3));

, поскольку args(<some matrix>) возвращает список строк матрицы, а [X, Y, Z]: <some list of 3 things> представляет параллельное присваивание.

Могу ли я спросить, для каких целей вы используете Maxima? ? Мне всегда интересно слышать, над чем работают люди. (Я разработчик и администратор проекта Maxima.)

0 голосов
/ 10 февраля 2020

Я нашел только так:

(%i1) Tx:[1,2,3,4,5,6,7,8,9,10];
(%o1)                   [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(%i2) Ty:[86,85,84,89,85,89,87,85,82,85];
(%o2)              [86, 85, 84, 89, 85, 89, 87, 85, 82, 85]
(%i3) ListT:makelist([Tx[i],Ty[i]],i,1,length(Tx));
(%o3) [[1, 86], [2, 85], [3, 84], [4, 89], [5, 85], [6, 89], [7, 87], [8, 85], [9, 82], [10, 85]]
...