Sto cercando di fare qualcosa di semplice in numpy, e sono sicuro che ci dovrebbe essere un modo semplice per farlo.Numpy: prodotto esterno di n vettori
Fondamentalmente, ho un elenco di n
vettori con varie lunghezze. Se v1[i]
è la i
'th entrata del primo vettore allora voglio trovare una gamma dimensionale n
, A, in modo tale che
A[i,j,k...] = v1[i] v2[j] v3[k] ...
mio problema è che:
outer
vogliono solo due vettore argomenti.einsum
richiede un parametro come "abcd ..." che sembra non necessario.kron
richiede quello che sembra un rimodellamento piuttosto complesso e richiede solo due argomenti.
Vorrei evitare il più possibile la complessità, in modo da evitare l'introduzione di bug. Quindi preferibilmente vorrei un singolo comando.
Finora, il migliore che ho un po 'in mente è:
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)
Il numero di vettori è sconosciuto fino al runtime? – DarenW
@DarenW sì, è corretto. – Lucas
Mi piace questo 'riduci (lambda a, b: a [..., np.newaxis] * b, vs)' ma non sono sicuro che possa essere considerato "un singolo comando". O se ci sono modi più veloci. – jorgeca