Numpy: внешнее произведение n векторов
Я пытаюсь сделать что-то простое в NumPy, и я уверен, что должен быть легкий способ сделать это.
В основном у меня есть списокn
векторы с различной длиной. Еслиv1[i]
этоi
ну первый элемент вектора, то я хочу найтиn
массив А, такой, что
A[i,j,k...] = v1[i] v2[j] v3[k] ...
Моя проблема в том, что:
outer
занимает всего двавектор аргументы.
einsum
требует такой параметр, как "abcd ...", который кажется ненужным.
kron
требует того, что кажется довольно сложным изменением формы, и принимает только два аргумента.
Я хотел бы избежать как можно большей сложности, чтобы избежать появления ошибок. Поэтому желательно, чтобы я хотел одну команду.
Пока что лучшее, что у меня есть, это:
vs = [v1, v2, v3 ...]
shape = map(len, vs)
# specify the orientation of each vector
newshapes = diag(array(shape)-1)+1
reshaped = [x.reshape(y) for x,y in zip(vs, newshapes)]
# direct product
A = reduce(lambda a,b: a*b, reshaped, 1)