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の専門家からはほど遠いですが、この質問を確認するように求められたので、ドキュメントをざっと見てみたところ、次のようになりました。

まず、行列に関するドキュメントを見ると、行列をリストに変換する1つの方法、つまり、しか得られませんでした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に類似して)、partDataLの頭を調べてDataM使用することができます:

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

次に、2つの構造の間で変換するには、substpartを使用できます

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

substpartレベルでの使用は、リスト以外でも機能することを除いて、を0使用する場合とほとんど同じです。apply

于 2012-01-07T23:12:25.400 に答える