Преобразование 1D списка в 3D список - PullRequest
3 голосов
/ 02 ноября 2010

У меня есть функция, которая преобразует одномерный список в трехмерный список, но в то же время, когда индексы 2-го и 3-го измерения равны, он устанавливает нули вместо значений из списка ввода:

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]

Iхотел бы избавиться от функции Increment [] (++).

Ответы [ 2 ]

1 голос
/ 03 ноября 2010

Вот альтернативный вариант (ab), использующий SparseArray, но он не устраняет необходимость в индексной переменной и приращении:

convert[l_] := Module[{q=1},
  Normal[SparseArray[{{_,i_,i_} -> 0, {i_,j_,k_} :> l[[q++]]}, {3, 4, 4}]]
]
1 голос
/ 02 ноября 2010

Я думаю, что это может сработать:

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

Возможно, кто-то более опытный может помочь избавиться от Разделения [Разделения противной конструкции.

HTH!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...