次の方法で、Maximaでリストを行列に変換します。
DataL : [ [1,2], [2,4], [3,6], [4,8] ];
DataM: apply('matrix,DataL);
他の方法でそれを行う方法は?与えられた行列DataMをリストDataLに変換する方法は?
次の方法で、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の専門家からはほど遠いですが、この質問を確認するように求められたので、ドキュメントをざっと見てみたところ、次のようになりました。
まず、行列に関するドキュメントを見ると、行列をリストに変換する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