Cursusinhoud
Ultieme NumPy
Ultieme NumPy
Uitzending
Voordat we in wiskundige bewerkingen in NumPy duiken, is het belangrijk om een sleutelconcept te begrijpen — broadcasting.
Wanneer NumPy met twee arrays werkt, controleert het hun vormen op compatibiliteit om te bepalen of ze samen kunnen worden gebroadcast.
Opmerking
Als twee arrays al dezelfde vorm hebben, is broadcasting niet nodig.
Zelfde aantal dimensies
Stel dat we twee arrays hebben waarvoor we optelling willen uitvoeren, met de volgende vormen: (2, 3)
en (1, 3)
. NumPy vergelijkt de vormen van de twee arrays beginnend vanaf de meest rechtse dimensie en beweegt naar links. Dat wil zeggen, het vergelijkt eerst 3 en 3, dan 2 en 1.
Twee dimensies worden als compatibel beschouwd als ze gelijk zijn of als een van hen 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 hen 1 is.
Aangezien alle dimensies compatibel zijn, worden de vormen als compatibel beschouwd. Daarom kunnen de arrays worden gebroadcast, resulterend in een standaard optelling tussen matrices van dezelfde vorm, die elementgewijs wordt uitgevoerd.
import 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)
Opmerking
array_2
is gemaakt als een 2D array met slechts één rij, daarom is de vorm(1, 3)
.
Maar wat zou er gebeuren als we het zouden maken als een 1D array met een vorm van (3,)
?
Verschillend Aantal Dimensies
Wanneer de ene array minder dimensies heeft dan de andere, worden de ontbrekende dimensies behandeld alsof ze een grootte van 1 hebben. Bijvoorbeeld, beschouw twee arrays met vormen (2, 3)
en (3,)
. Hier is 3 = 3, en de ontbrekende linker dimensie wordt beschouwd als 1, dus de vorm (3,)
wordt (1, 3)
. Aangezien de vormen (2, 3)
en (1, 3)
compatibel zijn, kunnen deze twee arrays worden gebroadcast.
import 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 Scalars
Naast wiskundige bewerkingen met arrays, kunnen we dankzij broadcasting ook soortgelijke bewerkingen uitvoeren tussen een array en een scalar (getal). In dit geval kan de array elke vorm hebben, aangezien een scalar in wezen geen vorm heeft en al zijn dimensies worden beschouwd als 1. Daarom zijn de vormen altijd compatibel.
import 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
Laten we ook een voorbeeld bekijken van incompatibele vormen, waarbij een rekenkundige bewerking niet kan worden uitgevoerd omdat broadcasting niet mogelijk is:
We hebben een 2x3
array en een 1D-array van lengte 2
, d.w.z. een vorm van (2,)
. De ontbrekende dimensie wordt beschouwd als 1, dus de vormen worden (2, 3)
en (1, 2)
.
Van links naar rechts: 3 != 2, dus we hebben onmiddellijk incompatibele dimensies, en daarom incompatibele vormen. Als we proberen de code uit te voeren, krijgen we een foutmelding:
import 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!