广义转置/置换尺寸

时间:2014-05-27 23:27:27

标签: algorithm clojure lisp

我需要像MatLab的permute(A, order)或Mathematica的Transpose[list, {n,...}]这样的Clojure向量(向量的......)。

交换第一维和第二维非常简单:(apply mapv vector x)但是我想要一个类似上面提到的函数的界面,我可以给出一个新的维度顺序,即(permute x [1 0])就是那个换位, 3个维度的(permute x [0 1 2])身份等。

Mathematica列表列表示例:

Array[a, {1, 2, 3}]
{{{a[1, 1, 1], a[1, 1, 2], a[1, 1, 3]},
  {a[1, 2, 1], a[1, 2, 2], a[1, 2, 3]}}}

Transpose[%, {3, 2, 1}]
{{{a[1, 1, 1]}, {a[1, 2, 1]}},
 {{a[1, 1, 2]}, {a[1, 2, 2]}},
 {{a[1, 1, 3]}, {a[1, 2, 3]}}}

现有的图书馆当然是最好的,但任何指针都会受到赞赏。 数值库通常只包装一维数组并调整偏移量,但我想要实际的列表。

0 个答案:

没有答案