我想生成一个带下标的名词列表,其中下标是“多维的”。
例如,使用以下两个列表作为输入:
[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]
因为我只使用其中的一些。
最佳答案
(%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]]
关于list - Maxima:生成下标为 "multi-dimensional"的名词列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29897980/