【问题标题】:Maxima: convert matrix to listMaxima:将矩阵转换为列表
【发布时间】:2011-12-31 15:23:49
【问题描述】:

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

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

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

【问题讨论】:

    标签: symbolic-math maxima computer-algebra-systems


    【解决方案1】:

    我知道这已经很晚了,但值得一提的是,有一个更简单的方法。

    my_matrix : matrix ([a, b, c], [d, e, f]);
    my_list : args (my_matrix);
     => [[a, b, c], [d, e, f]]
    

    【讨论】:

    • @Grzegorz 你能把勾号移到罗伯特的答案上吗,因为这似乎是更合理的做事方式。
    • @Simon Fair point - 刚刚做了。但是,我不记得为什么,因为我正在编写更长的 Maxima 脚本,在我的情况下,您的解决方案效果更好或更方便。无论如何 - 勾号移动。谢谢你们俩的帮助,干杯!
    【解决方案2】:

    我远不是 Maxima 专家,但自从 you asked me to look at this question 之后,我在快速浏览了 documentation 后就知道了。

    首先,查看documentation on matrices 只产生了一种将矩阵转换为列表的方法,即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 几乎相同,但它不仅仅适用于列表。

    【讨论】:

    • 谢谢@Simon。您的解决方案效果很好。我一直在前进和后退文档,但没有成功。由于我使用最小二乘法,而且很少有人对不同类型进行操作(一些限制为矩阵,而另一些则对列表进行操作),因此两种方式的转换很有帮助。
    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 2014-05-07
    相关资源
    最近更新 更多