2015-04-27 42 views
2

我想生成下標名稱爲「多維」的下標名詞列表。Maxima:生成帶有「多維」下標的名詞列表

例如,使用兩個以下列表作爲輸入:

[1,5,2] 
[3,5,1] 

我想生成以下列表:

[a[3,1],a[5,5],a[1,2]] 

這裏是一個工作示例:

(%i1) indexX : [1,5,2]; 
(%i2) indexY : [3,5,1]; 
(%i3) makelist(a[i], i, indexX); 
(%i4) map(endcons, indexY, %); 

(%o1) [1,5,2] 
(%o2) [3,5,1] 
(%o3) [a[1],a[5],a[2]] 
(%o4) [a[3,1],a[5,5],a[1,2]] 

這有效,但它需要兩行(請致電makelist(),然後致map())。因此它不是很優雅。

有沒有更好的方法來達到類似的結果?

注意:陣列不適合這項工作,因爲1.索引可以是負數,2.我不想爲[1,1][5,5]之間的所有索引分配內存,因爲我只使用其中的幾個。

回答

2
(%i1) display2d: false $ 
(%i2) indexX : [1,5,2] $ 
(%i3) indexY : [3,5,1] $ 
(%i4) map(lambda([[L]], arraymake('a, L)), indexX, indexY); 
(%o4) [a[1,3],a[5,5],a[2,1]] 
+0

這是一個有趣的解決方案,你有。但是,我有點困惑:一個下標名詞和一個數組元素有區別嗎?對'arraymake()'的調用是產生一個數組還是隻產生一個名詞? –

+0

@GLorieul [arraymake](http://maxima.sourceforge.net/docs/manual/maxima_5.html#IDX142)返回未評估的表達式。你也可以考慮[subvar](http://maxima.sourceforge.net/docs/manual/maxima_5.html#IDX150) – slitvinov

+0

好,所以你的解決方案適合我。我仍然對maxima調用數組感到困惑,但我會將它作爲一個新的stackoverflow問題發佈(這似乎是最合適的)。 –