Decodifica del prodotto puntato di NumPy una breve esplorazione della magia dimensionale
Decodifica del prodotto puntato di NumPy esplorazione magica dimensionale
Chiarire una volta per tutte la confusione sul prodotto scalare di NumPy

Introduzione
Sono l’unico che periodicamente si confonde quando si tratta di dimensioni in NumPy? Oggi, mentre stavo leggendo una pagina di documentazione di Gradio, mi sono imbattuto nel seguente frammento di codice:
sepia_filter = np.array([ [0.393, 0.769, 0.189], [0.349, 0.686, 0.168], [0.272, 0.534, 0.131],])# forma di input_img (H, W, 3)# forma di sepia_filter (3, 3)sepia_img = input_img.dot(sepia_filter.T) # <- perché questo è lecito??sepia_img /= sepia_img.max()
Ehi, ehi, ehi! Perché il prodotto scalare di un’immagine (W, H, 3) con un filtro (3, 3) è lecito? Ho chiesto a ChatGPT di spiegarmelo, ma ha iniziato a darmi risposte sbagliate (come dire che questo non funziona) o a ignorare la mia domanda e a rispondere ad altro. Quindi, non c’è stata altra soluzione se non usare il mio cervello (più leggere la documentazione, sigh).
Se anche tu sei un po’ confuso dal codice sopra, continua a leggere.
Prodotto Scalare: Un Esempio Generico
Dalla documentazione del prodotto scalare di NumPy (con piccole modifiche):
- La Scultura dei Sogni DreamTime è un Modello di Intelligenza Artificiale che Migliora la Strategia di Ottimizzazione per la Generazione di Contenuti 3D a partire da Testo
- Navigare il vasto panorama dei modelli di linguaggio
- Loguru Semplice come una stampa, flessibile come un log
Se a.shape = (I, J, C) e b.shape = (K, C, L), allora dot(a, b)[i, j, k, l] = sum(a[i, j, :] * b[k, :, l]). Notare che l’ultima dimensione di “a” è uguale alla penultima dimensione di “b”.
O, in codice:
I, J, K, L, C = 10, 20, 30, 40, 50a = np.random.random((I, J, C))b = np.random.random((K, C, L))c = a.dot(b)i, j, k, l = 3, 2, 4, 5print(c[i, j, k, l])print(sum(a[i, j, :] * b[k, :, l]))
Output (stesso risultato):
13.12501290128471313.125012901284713
Comprensione della Forma del Prodotto Scalare di NumPy
Per determinare la forma di un prodotto scalare in anticipo, segui questi passaggi:
Passaggio 1: Considera due array, “a” e “b,” con le rispettive forme.
# Esempi di forme per gli array a e ba_shape = (4, 3, 2)b_shape = (3, 2, 5)# Crea array casuali con le forme specificatea = np.random.random(a_shape)b =…