Sono interessato a calcolare un grande array NumPy. Ho un grande array A
che contiene un sacco di numeri. Voglio calcolare la somma di diverse combinazioni di questi numeri. La struttura dei dati è la seguente:Vectorize grande moltiplicazione NumPy
A = np.random.uniform(0,1, (3743, 1388, 3))
Combinations = np.random.randint(0,3, (306,3))
Final_Product = np.array([ np.sum(A*cb, axis=2) for cb in Combinations])
mia domanda è se c'è un modo efficiente più elegante e di memoria per calcolare questo? Trovo frustrante lavorare con np.dot()
quando è coinvolto un array 3D.
Se è utile, la forma di Final_Product
dovrebbe essere idealmente (3743, 306, 1388). Attualmente lo Final_Product
ha la forma (306, 3743, 1388), quindi posso solo rimodellare per arrivarci.
Grazie! Ho anche trovato la risposta di @ajcr come molto utile. Usando il tensore ho dimezzato il tempo utilizzato in 'np.einsum' – Julien
@ Julien mi piace anche la soluzione di ajcr! Penso che sia una versione succinta di ciò che 'punto' fa qui. – Divakar