Maxima:将矩阵转换为列表



我用下面的方法将list转换为Maxima中的矩阵:

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

怎么用另一种方法呢?如何将给定矩阵DataM转换为列表DataL ?

我知道现在已经太晚了,但不管怎样,有一个更简单的方法。

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

这是笨拙的,可能是低效的。使用Maxima中的底层Lisp结构(类似于Mathematica,我更熟悉),您可以使用part:

检查DataLDataM的头
part(DataL, 0);  /*  [       */
part(DataM, 0);  /*  matrix  */

然后使用substpart

在两个结构之间进行转换
is(substpart(matrix, DataL, 0) = DataM);   /*  true  */
is(substpart( "[",   DataM, 0) = DataL);   /*  true  */

0级别使用substpart几乎与使用apply相同,除了它不仅仅适用于列表。

最新更新