Maxima:生成带有 "multi-dimensional" 下标的名词列表
Maxima: generating a list of nouns with "multi-dimensional" subscripts
我想生成下标名词列表,其中下标为 "multi-dimensional"。
例如,使用以下两个列表作为输入:
[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]]
我想生成下标名词列表,其中下标为 "multi-dimensional"。
例如,使用以下两个列表作为输入:
[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]]