我轉換列表中的千里馬,以矩陣方式如下:千里馬:轉換矩陣列出
DataL : [ [1,2], [2,4], [3,6], [4,8] ];
DataM: apply('matrix,DataL);
如何做到這一點的其他方式?如何將給定矩陣DataM轉換成列表DataL?
我轉換列表中的千里馬,以矩陣方式如下:千里馬:轉換矩陣列出
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]]
我遠離千里馬專家,但自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 */
這是笨拙的,可能效率低下。使用在千里馬底層Lisp的結構(和類比於數學,這我更熟悉),你可以使用part考察DataL
和頭:
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。您的解決方案很好。我一直在前進和落後的文件沒有成功。由於我使用的是最小二乘方法,而其他一些操作類型不同的其他方法(一些限制在矩陣中,而另一些則在列表上操作),所以雙向轉換是很大的幫助。 – 2012-01-08 11:39:09
謝謝。似乎工作:-)。 – 2012-09-28 16:53:29
@Grzegorz你可以將複選標記移動到Robert的答案上,因爲它似乎是更合理的做事方式。 – Simon 2013-09-27 10:00:03
@Simon Fair point - 剛剛做到了。但是,我不記得爲什麼,因爲我正在寫更長的Maxima腳本,在我的情況下,您的解決方案工作得更好或更方便。無論如何 - 剔動了。感謝你們的幫助,乾杯! – 2013-10-21 18:26:58