我有将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 [](++)函数。
答案 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}]]
]