12

我通过以下方式将列表转换为 Maxima 中的矩阵:

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

如何以另一种方式做到这一点?如何将给定的矩阵DataM转换为列表DataL

4

2 回答 2

17

我知道这在游戏中已经很晚了,但是对于它的价值,有一个更简单的方法。

my_matrix : matrix ([a, b, c], [d, e, f]);
my_list : args (my_matrix);
 => [[a, b, c], [d, e, f]]
于 2012-09-26T06:50:55.767 回答
7

我远非 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  */

这是笨拙的并且可能效率低下。使用 Maxima 中的底层 Lisp 结构(类似于我更熟悉的 Mathematica),您可以检查DataLDataM使用part的头部:

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

然后要在两个结构之间进行转换,可以使用substpart

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

使用substpartat level0几乎与 using 相同apply,除了它不仅仅适用于列表。

于 2012-01-07T23:12:25.400 回答