千里马:将矩阵转换为列表

Grz*_*cki 9 symbolic-math computer-algebra-systems maxima

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

DataL : [ [1,2], [2,4], [3,6], [4,8] ];
DataM: apply('matrix,DataL);
Run Code Online (Sandbox Code Playgroud)

怎么用其他方式呢?如何将给定矩阵DataM转换为DataL列表?

Rob*_*ier 14

我知道它在游戏的后期,但是对于它的价值,有一种更简单的方法.

my_matrix : matrix ([a, b, c], [d, e, f]);
my_list : args (my_matrix);
 => [[a, b, c], [d, e, f]]
Run Code Online (Sandbox Code Playgroud)


Sim*_*mon 6

我离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  */
Run Code Online (Sandbox Code Playgroud)

这很笨拙,可能效率低下.使用Maxima中的底层Lisp结构(和我更熟悉的Mathematica类比),您可以检查部分的头部DataLDataM使用部分:

part(DataL, 0);  /*  [       */
part(DataM, 0);  /*  matrix  */
Run Code Online (Sandbox Code Playgroud)

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

is(substpart(matrix, DataL, 0) = DataM);   /*  true  */
is(substpart( "[",   DataM, 0) = DataL);   /*  true  */
Run Code Online (Sandbox Code Playgroud)

在使用substpart级别0几乎与使用相同apply,除了它不仅仅是列表.