将1D列表转换为3D列表

时间:2010-11-02 18:47:23

标签: wolfram-mathematica

我有将1D列表转换为3D列表的函数,但是当第2和第3维索引相等时,它会将0放在输入列表中而不是值:

n = 4

input = Table[RandomInteger[5], {i, 1, 48}]

convert[l_] := Table[If[i == j, 0, l[[index++]]], {s, 1, 4}, {i, 1, n}, {j, 1, n}]

output = convert[input]

我想摆脱Increment [](++)函数。

2 个答案:

答案 0 :(得分:1)

我认为这可行:

convert[l_] := Insert[Partition[Partition[l, 3], 4], 0, 
                      Flatten[Table[{j, i, i}, {j, 4}, {i, 4}], 1]]

也许更精明的人可能有助于摆脱 Partition [Partition 讨厌的构造。

HTH!

答案 1 :(得分:1)

这是使用SparseArray的替代方法(ab),但它不会消除索引变量和增量的需要:

convert[l_] := Module[{q=1},
  Normal[SparseArray[{{_,i_,i_} -> 0, {i_,j_,k_} :> l[[q++]]}, {3, 4, 4}]]
]