Broadcasting
Veeg om het menu te tonen
Voordat we ingaan op wiskundige bewerkingen in NumPy, is het belangrijk om een kernbegrip te begrijpen: broadcasting.
Broadcasting is een methode om de vormen van arrays op elkaar af te stemmen voor het uitvoeren van rekenkundige bewerkingen zonder deze handmatig te hoeven herschalen. Broadcasting past de vormen van arrays automatisch aan.
Wanneer NumPy met twee arrays werkt, controleert het hun vormen op compatibiliteit om te bepalen of ze samen kunnen worden gebroadcast.
Als twee arrays al dezelfde vorm hebben, is broadcasting niet nodig.
Zelfde aantal dimensies
Stel dat je twee arrays hebt waarop je optelling wilt uitvoeren, met de volgende vormen: (2, 3) en (1, 3). NumPy vergelijkt de vormen van de twee arrays beginnend bij de meest rechtse dimensie en beweegt naar links. Dat wil zeggen, het vergelijkt eerst 3 en 3, daarna 2 en 1.
Twee dimensies worden als compatibel beschouwd als ze gelijk zijn of als een van beide 1 is:
- Voor de dimensies 3 en 3 zijn ze compatibel omdat ze gelijk zijn;
- Voor de dimensies 2 en 1 zijn ze compatibel omdat een van beide 1 is.
Omdat alle dimensies compatibel zijn, worden de vormen als compatibel beschouwd. Daarom kunnen de arrays worden gebroadcast, wat resulteert in een standaard optelling tussen matrices van dezelfde vorm, die elementgewijs wordt uitgevoerd.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 2D array with 1 row array_2 = np.array([[11, 12, 13]]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
array_2 is aangemaakt als een 2D array met slechts één rij, waardoor de vorm (1, 3) is.
Maar wat zou er gebeuren als je het zou aanmaken als een 1D array met de vorm (3,)?
Verschillend aantal dimensies
Wanneer één array minder dimensies heeft dan de andere, worden de ontbrekende dimensies beschouwd als grootte 1. Neem twee arrays met vormen (2, 3) en (3,). Hier geldt 3 = 3, en de ontbrekende linker dimensie wordt gezien als 1, waardoor de vorm (3,) verandert in (1, 3). Omdat de vormen (2, 3) en (1, 3) compatibel zijn, kunnen deze twee arrays worden gebroadcast.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 1D array array_2 = np.array([11, 12, 13]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
Broadcasting van scalairs
Naast wiskundige bewerkingen met arrays, kun je dankzij broadcasting ook vergelijkbare bewerkingen uitvoeren tussen een array en een scalair (getal). In dit geval kan de array elke vorm hebben, omdat een scalair in wezen geen vorm heeft en al zijn dimensies als 1 worden beschouwd. Daarom zijn de vormen altijd compatibel.
123456import numpy as np array = np.array([[1, 2, 3], [4, 5, 6]]) print(array.shape) # Broadcasting and element-wise addition result = array + 10 print(result)
Incompatibele vormen
Beschouwing van een voorbeeld van incompatibele vormen, waarbij een rekenkundige bewerking niet kan worden uitgevoerd omdat broadcasting niet mogelijk is:
Je hebt een 2x3 array en een 1D-array van lengte 2, oftewel een vorm van (2,). De ontbrekende dimensie wordt beschouwd als 1, dus de vormen worden (2, 3) en (1, 2).
Beginnend bij de meest rechtse dimensie: 3=2, dus je hebt direct incompatibele dimensies, en daardoor incompatibele vormen. Als je de code probeert uit te voeren, krijg je een foutmelding:
12345678import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) array_2 = np.array([11, 12]) print(array_2.shape) # ValueError result = array_1 + array_2 print(result)
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.