NumPy-arrays en gevectoriseerd rekenen

Leer in Python met getallen werken zoals data-analisten dat doen: als NumPy-arrays. Maak arrays en kies hun datatypes, selecteer waarden op positie of op voorwaarde, wijzig de vorm van arrays en voeg ze samen. Vervang trage lussen door gevectoriseerde berekeningen, universele functies en broadcasting. Vat gegevens samen per rij of kolom, verwerk ontbrekende waarden en gebruik een toevalsgenerator met een startwaarde om reproduceerbare simulaties uit te voeren.

GemiddeldLes 1 van 8 in Cursus Data-analyse met Python: NumPy, pandas en visualisatie

Wat je leert

  1. Maak NumPy-arrays uit Python-gegevens en met de aanmaakfuncties van NumPy, beschrijf een array aan de hand van de vorm en het datatype en kies en converteer datatypes zonder onbedoeld informatie te verliezen.
    • Leg uit wat een NumPy-array is en hoe die verschilt van een lijst
      Beschrijf een array aan de hand van het aantal dimensies, de vorm, het aantal elementen en het datatype, en leg uit waarom arrays zich anders gedragen en anders presteren dan Python-lijsten.
    • Maak arrays uit lijsten en met de aanmaakfuncties van NumPy
      Zet lijsten om in arrays en maak gevulde arrays, getallenreeksen en rasters met gelijkmatig verdeelde punten in de vorm en met het type dat je nodig hebt.
    • Kies, controleer en converteer datatypes
      Lees het datatype van een array af en stel het in, voorspel welk type NumPy kiest en converteer tussen types zonder afkappen, overloop en verlies van ontbrekende waarden.
  2. Selecteer afzonderlijke waarden, rijen, kolommen en blokken, selecteer met lijsten van posities of met voorwaarden en bepaal wanneer een selectie gegevens deelt met de oorspronkelijke array.
    • Gebruik indexering en deelbereiken in een- en tweedimensionale arrays
      Gebruik posities en deelbereiken, één per as, om elementen, rijen, kolommen en blokken te lezen en te wijzigen.
    • Selecteer met lijsten van posities en onderscheid weergaven van kopieën
      Selecteer willekeurige elementen, rijen of kolommen met arrays van gehele getallen en voorspel of een resultaat geheugen deelt met de oorspronkelijke array.
    • Filter op voorwaarden met booleaanse maskers en np.where
      Maak waar-of-onwaar-maskers met vergelijkingen, combineer ze en gebruik ze om waarden te filteren, tellen, vervangen en kiezen.
  3. Rangschik dezelfde waarden in een nieuwe vorm, verwissel rijen en kolommen, voeg assen met lengte 1 toe of verwijder ze, en voeg arrays samen of splits ze op langs een as.
    • Wijzig de vorm van een array en verwissel de assen
      Wijzig de vorm van arrays, vlak ze af en transponeer ze, en voeg assen met lengte 1 toe of verwijder ze. Voorspel daarbij de volgorde van de waarden.
    • Voeg arrays samen en splits ze op
      Combineer arrays langs een bestaande of een nieuwe as en splits een array in stukken, waarbij je controleert of de vormen passen.
  4. Schrijf berekeningen voor volledige arrays in plaats van lussen die element voor element werken, pas de universele functies van NumPy toe en combineer arrays met verschillende vormen volgens de broadcastingregels.
    • Reken elementsgewijs in plaats van met lussen
      Gebruik reken- en vergelijkingsoperatoren op volledige arrays en weet hoe ze omgaan met vormen, deling door nul en wijzigingen in het bestaande geheugen.
    • Pas universele functies toe op volledige arrays
      Gebruik de elementsgewijze wiskundige functies van NumPy, waaronder afronding en functies voor twee arrays, en verwerk waarden buiten het domein van een functie.
    • Combineer arrays met verschillende vormen via broadcasting
      Pas de broadcastingregels toe om te voorspellen of twee vormen te combineren zijn en welke vorm het resultaat krijgt, en los vormfouten op door een as toe te voegen.
  5. Reduceer arrays tot totalen, gemiddelden, uitersten, spreidingsmaten, medianen en aantallen, voor de hele array of langs een gekozen as, en verwerk ontbrekende waarden en deelverzamelingen correct.
    • Aggregeer een volledige array of langs één as
      Bereken sommen, gemiddelden, uitersten, posities, cumulatieve totalen en spreidingsmaten voor de hele array of per rij of kolom, en voorspel de vorm van het resultaat.
    • Gebruik medianen, percentielen, sortering en unieke waarden
      Beschrijf het centrum en de spreiding van gegevens met statistische maten op basis van de volgorde, sorteer waarden en bijbehorende arrays en tel unieke waarden.
    • Vat gegevens samen met aandacht voor ontbrekende waarden en voorwaarden
      Zoek, tel, verwijder en vul ontbrekende waarden aan, gebruik aggregaties die NaN-waarden overslaan en vat alleen de waarden samen die aan een voorwaarde voldoen of tot een groep behoren.
  6. Maak een toevalsgenerator met een startwaarde, trek reproduceerbare steekproeven uit veelgebruikte verdelingen, schud gegevens en trek er steekproeven uit, en schat resultaten met gevectoriseerde simulaties.
    • Trek reproduceerbare aselecte steekproeven met een Generator
      Maak een Generator met een startwaarde, trek gehele en decimale getallen, waarden uit een normale verdeling en steekproeven uit een lijst, schud gegevens en zorg dat resultaten reproduceerbaar blijven.
    • Voer gevectoriseerde simulaties uit
      Schat kansen en gedrag op lange termijn door alle toevalswaarden tegelijk te trekken en ze met arraybewerkingen samen te vatten.

NumPy-arrays: uitleg

6 hoofdstukken

1

Maak arrays en bepaal hun datatypes

Numerieke gegevens zijn makkelijker te verwerken als hun structuur en opslagtype duidelijk zijn. Maak arrays uit bestaande waarden of op basis van een geplande vorm en lees vervolgens hun dimensies, aantal elementen en datatype af. Kies aanmaakfuncties die bij je invoer passen en bekijk hoe conversie, afronding, overloop en ontbrekende waarden beïnvloeden wat de array daadwerkelijk opslaat. Deze keuzes bepalen of latere berekeningen de informatie behouden die je nodig hebt.

1.1 Leg uit wat een NumPy-array is en hoe die verschilt van een lijst

NumPy slaat numerieke gegevens op in arrays, zodat één expressie op veel waarden kan werken. Importeer NumPy met import numpy as np; de korte naam np is de gebruikelijke manier om de functies aan te roepen.

Lees de structuur van een array af

Een ndarray is een rechthoekig raster waarvan de elementen één datatype delen. Een dimensie wordt ook een as genoemd. Begin met een kleine tabel:

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])

De attributen beantwoorden vier verschillende vragen:

AttribuutBetekenisWaarde voor a
ndimAantal assen2
shapeLengte van elke as(2, 3)
sizeTotaal aantal elementen6
dtypeType van elk elementMeestal int64 op een 64-bitscomputer

As 0 indexeert rijen; as 1 indexeert kolommen. Een gegevenstabel met één rij per persoon en kolommen voor lengte, massa en leeftijd heeft voor 100 personen vorm (100, 3). Het product van de waarden in de vorm geeft het aantal elementen.

Een vector heeft geen rij- of kolomas

np.array([2, 4, 6, 8]) heeft vorm (4,) en één as. De komma maakt hiervan een tuple met één item. Vorm (1, 4) heeft twee assen: één rij en vier kolommen. Vorm (4, 1) heeft ook twee assen, maar vier rijen en één kolom. Deze arrays bevatten vier waarden, maar gedragen zich anders als je ze met andere arrays combineert. np.array(7) is een nuldimensionale array: de vorm is () en de ndim is 0.

Arrays veranderen de betekenis van operatoren

Een lijst is een algemene Python-container. Een array is ontworpen voor berekeningen op overeenkomstige posities.

ExpressieResultaat
[1, 2, 3] * 2[1, 2, 3, 1, 2, 3]
np.array([1, 2, 3]) * 2array([2, 4, 6])
[1, 2] + [3, 4][1, 2, 3, 4]
np.array([1, 2]) + np.array([3, 4])array([4, 6])

Bij het optellen van de arrays wordt 1 gekoppeld aan 3 en 2 aan 4. Het aantal elementen van de array blijft gelijk.

Waarom numerieke arrays efficiënt zijn

Een nieuw gemaakte numerieke array slaat waarden van hetzelfde type bij elkaar op in het geheugen. NumPy doorloopt deze waarden in gecompileerde code en vermijdt zo een afzonderlijke bewerking op Python-niveau voor elk getal. Een miljoen float64-waarden nemen 8.000.000 bytes aan elementopslag in. Bij een array van die omvang kun je dit aflezen met a.nbytes. Een Python-lijst slaat ook verwijzingen naar Python-objecten op en heeft daardoor aanzienlijk meer ruimte nodig. De prestatiewinst hangt af van de berekening en de computer.

Het aantal elementen van een array groeit niet door een append-methode in het bestaande geheugen. np.append(a, value) reserveert geheugen voor een nieuwe array. Voor gegevens die je één waarde tegelijk verzamelt, maak je een Python-lijst die je één keer converteert. Geneste invoer moet rechthoekig zijn: np.array([[1, 2], [3]]) geeft een ValueError omdat de rijlengtes verschillen.

Herken weergegeven resultaten

print(np.array([1, 2, 3])) toont [1 2 3]. Een interactieve weergave gebruikt array([1, 2, 3]). Voor np.array([5, 6])[0] op een 64-bitscomputer toont NumPy 2 np.int64(5); deze waarde neemt als het getal 5 deel aan berekeningen.

Belangrijkste punten

  • De vorm geeft de lengte van elke as; het aantal elementen telt alle elementen.
  • Een 1-dimensionale vorm zoals (4,) verschilt van een 2-dimensionale rij of kolom.
  • Arrayberekeningen werken op waarden op overeenkomstige posities.
  • Numerieke arrays slaan één datatype op en ondersteunen efficiënte gecompileerde berekeningen.
  • Geneste invoer moet rijen van gelijke lengte hebben.

1.2 Maak arrays uit lijsten en met de aanmaakfuncties van NumPy

Kies een aanmaakfunctie door na te gaan wat je weet: de daadwerkelijke waarden, een vorm en vulwaarde, een stapgrootte of een vereist aantal punten. Die keuze laat de code uitdrukken hoe de gegevens moeten worden opgebouwd.

Begin met waarden of een vorm

np.array([3, 1, 4]) maakt een vector. Een lijst van even lange lijsten maakt een tabel. Geef de waarden als één reeks door; met np.array(1, 2, 3) geef je de drie elementen niet correct op.

FunctieVoorbeeldWat de functie maakt
np.zerosnp.zeros((3, 4))Drie rijen van vier nullen
np.onesnp.ones((2, 3))Twee rijen van drie enen
np.fullnp.full((2, 2), 7)Een 2×2-array gevuld met 7
np.emptynp.empty((3, 4))Gereserveerde, niet-geïnitialiseerde opslag

Bij een multidimensionale vorm zijn de haakjes belangrijk. np.zeros((2, 3)) geeft één tuple door. Bij np.zeros(2, 3) geeft Python 3 door als argument voor het datatype, wat een typefout veroorzaakt. Nullen en enen gebruiken standaard float64; full leidt het datatype af uit de vulwaarde. Voeg dtype=int toe als je opslag voor gehele getallen nodig hebt.

empty garandeert geen nullen of betekenisvolle beginwaarden. Lees de array pas nadat je elk element dat je gaat gebruiken een waarde hebt gegeven. zeros is een eenvoudigere keuze als een beginwaarde van nul betekenis heeft.

Kies een stap of een aantal punten

np.arange(start, stop, step) volgt hetzelfde principe van stappen als range van Python. np.arange(2, 11, 3) geeft [2 5 8]: begin bij 2 en tel steeds 3 op zolang je onder 11 blijft. Met één argument begint np.arange(5) bij 0 en geeft de functie [0 1 2 3 4].

Stappen met drijvendekommagetallen kunnen verrassende eindpunten opleveren. Zo bevat np.arange(1, 1.3, 0.1) de weergegeven waarde 1,3 omdat binaire afronding de berekening van de reeks beïnvloedt. Gebruik voor een decimaal raster met een vast aantal punten linspace:

grid = np.linspace(0, 1, 5)
# array([0.  , 0.25, 0.5 , 0.75, 1.  ])

Beide eindpunten worden standaard meegenomen. Vijf punten maken vier tussenruimtes. Tien punten tussen 0 en 1 maken negen tussenruimtes, dus hun afstand is ongeveer 0,111; voor stappen van 0,1 zijn 11 punten nodig.

Gebruik een bestaande structuur opnieuw

np.zeros_like(a), np.ones_like(a) en np.full_like(a, value) maken nieuwe arrays met de vorm en het datatype van a. Het overgenomen datatype is van belang: als je een sjabloon met gehele getallen vult met een decimaal getal, kan het decimale deel verloren gaan tenzij je om een drijvendekommatype vraagt. np.eye(3) maakt een vierkante eenheidsmatrix met enen op de diagonaal en elders nullen.

Reserveer één keer geheugen voor een gegevenstabel

Voor neerslag in millimeters op drie meetstations gedurende vier weken:

rain = np.zeros((3, 4))
rain[0] = [12.0, 0.0, 5.5, 8.0]

De eerste toekenning vult één rij en behoudt vorm (3, 4). Als het aantal metingen bekend is, voorkom je door geheugen voor de volledige tabel te reserveren dat je herhaaldelijk geheugen voor grotere arrays moet reserveren. Als de hoeveelheid invoer onbekend is, verzamel je waarden in een lijst en roep je np.array aan zodra het verzamelen klaar is.

Belangrijkste punten

  • Geef een multidimensionale vorm door als tuple.
  • arange geeft een stap op; linspace geeft een aantal punten op.
  • linspace neemt standaard beide eindpunten mee.
  • empty moet worden gevuld voordat de waarden worden gebruikt.
  • De like-functies nemen zowel de vorm als het datatype over.
  • Reserveer één keer geheugen voor een bekende uiteindelijke vorm.

1.3 Kies, controleer en converteer datatypes

Het datatype van een array bepaalt wat die kan opslaan en hoeveel geheugen elke waarde nodig heeft. Door het juiste type te kiezen voorkom je ook dat berekeningen ongemerkt informatie verliezen.

Controleer het opslagtype

int64 bevat 64-bits gehele getallen, float64 bevat binaire drijvendekommagetallen en bool bevat waar-of-onwaarwaarden. Unicode-datatypes zoals <U5 slaan tekst op met een maximaal aantal tekens. a.itemsize is het aantal bytes per element; a.nbytes is a.size * a.itemsize. Een float64 gebruikt 8 bytes en heeft een precisie van ongeveer 15 significante decimale cijfers.

Op doorsnee 64-bitscomputers gebruikt invoer van gehele getallen 64-bits gehele getallen. NumPy 2 gebruikt die standaard ook op 64-bits Windows. Decimale invoer geeft normaal gesproken float64.

Automatische typeafleiding kiest één gedeeld type

np.array([1, 2.5]) wordt [1. 2.5]: het gehele getal wordt weergegeven als float. np.array([True, 2]) wordt [1 2]. Als je getallen en tekst mengt, kan de hele array in tekst veranderen, zodat een label zoals 'n/a' latere berekeningen kan laten mislukken. Controleer dtype als gegevens die numeriek lijken niet kunnen worden opgeteld of vermenigvuldigd.

Converteer bewust

astype geeft een geconverteerde kopie terug:

x = np.array([1.7, -1.7, 2.5])
whole = x.astype(int)
# array([ 1, -1,  2])

Deze conversie kapt af richting nul; die rondt niet af. np.round(x).astype(int) geeft [2 -2 2] omdat exacte halven worden afgerond naar het dichtstbijzijnde even getal. Tekst zoals '1.5' kan met astype(float) worden geconverteerd, maar 'n/a' geeft een ValueError. Schoon plaatsvervangende waarden op vóór de conversie.

Toekenningen gebruiken het datatype van de bestemming. Na a = np.array([1, 2, 3]) slaat de toekenning a[0] = 9.9 zonder waarschuwing 9 op. Als je eerst de hele array naar float converteert, kunnen latere toekenningen decimalen behouden.

Gehele getallen met een vaste breedte kunnen overlopen

Een int8 bevat waarden van −128 tot en met 127; een uint8 bevat 0 tot en met 255. Als je twee uint8-arrays met 250 en 10 optelt, krijg je door terugloop 4. Als je een int8-array met 100 vermenigvuldigt met 2, krijg je −56. Een geheel Python-getal dat niet in het arraytype past, zoals 300 opgeteld bij een int8-array in NumPy 2, geeft daarentegen een OverflowError. Zet kleine geheelgetaltypes om naar ruimere types voordat je berekeningen uitvoert die buiten hun bereik kunnen komen.

Delen en benaderde decimale getallen
BewerkingVoorbeeldResultaat
Gewone delingnp.array([7, 8]) / 2[3.5 4.]
Geheeltallige deling naar benedennp.array([7, -7]) // 2[3 -4]
Restnp.array([7, -7]) % 2[1 1]

Geheeltallige deling rondt naar beneden af, richting min oneindig. Bij negatieve resultaten verschilt dit van afkappen. Gewone deling geeft bij gehele invoer drijvendekommaresultaten terug.

Veel decimale breuken zijn binair opgeslagen benaderingen. 0.1 + 0.2 == 0.3 is onwaar; np.isclose vergelijkt overeenkomstige waarden met een tolerantie en np.allclose geeft één antwoord voor de hele array.

De markering voor ontbrekende waarden np.nan is een drijvendekommawaarde. Arrays met gehele getallen kunnen die niet opslaan. np.array([1, 2, np.nan]) wordt daarom een array met drijvendekommagetallen; ontbrekende waarden naar gehele getallen converteren herstelt ze niet en kan betekenisloze resultaten opleveren.

Belangrijkste punten

  • Eén datatype geldt voor elk element, ook voor waarden die later worden toegekend.
  • astype(int) kapt af richting nul; afronden is een afzonderlijke stap.
  • Kleine gehele getallen met een vaste breedte kunnen tijdens berekeningen overlopen.
  • Gebruik vergelijkingen met een tolerantie voor benaderde decimale getallen.
  • NaN heeft een drijvendekommatype nodig.
2

Selecteer en filter gegevens in arrays

Voor een analyse heb je zelden elke waarde in precies de oorspronkelijke volgorde nodig. Selecteer afzonderlijke posities, regelmatige deelbereiken, willekeurige records of items die aan een voorwaarde voldoen. Ga voordat je een resultaat wijzigt na of het geheugen deelt met de bron. Met booleaanse maskers kun je vervolgens dezelfde selectieregel gebruiken voor filteren, vervangen, aantallen en aandelen, terwijl je volledige records behoudt als je vraag daarom vraagt.

2.1 Gebruik indexering en deelbereiken in een- en tweedimensionale arrays

Met indexering zoek je waarden op positie. Met deelbereiken selecteer je een regelmatige reeks posities. Schrijf in een tabel voor elke as een selector, zodat de code aangeeft welke rijen en welke kolommen je nodig hebt.

Lees een vector

Voor a = np.array([10, 20, 30, 40, 50]) bevat positie 0 de waarde 10 en positie −1 de waarde 50. Een deelbereik heeft de vorm start:stop:step, waarbij de stoppositie is uitgesloten:

SelectieResultaat
a[1:4][20 30 40]
a[::2][10 30 50]
a[::-1][50 40 30 20 10]
a[3:10][40 50]

Als je start of stop weglaat, loopt het bereik door tot het betreffende uiteinde. Een deelbereik kan buiten de array lopen en wordt dan automatisch ingekort. Eén ongeldige positie, zoals a[5], geeft een IndexError.

Geef elke tabelas een eigen selector
m = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])

m[1, 2] leest rij 1, kolom 2 en geeft 6. De komma scheidt de assen. Een dubbele punt op zichzelf selecteert de volledige as: m[0, :] geeft de eerste rij [1 2 3] en m[:, 1] geeft de tweede kolom [2 5 8]. Voor een blok selecteert m[:2, 1:] de rijen 0 en 1 en de kolommen 1 en 2, wat [[2 3] [5 6]] geeft.

Behandel herhaalde indexering met vierkante haken niet als uitwisselbaar met indexering met een komma. m[1][2] vindt toevallig dezelfde scalaire waarde als m[1, 2]. Maar m[:][0] neemt eerst alle rijen en selecteert daarna de eerste rij. Het selecteert niet de eerste kolom; dat doet m[:, 0].

Voorspel welke assen overblijven

Een selector met één gehele index verwijdert de bijbehorende as. Een deelbereik behoudt de as, ook als maar één positie is geselecteerd. Zo heeft m[:, 1] vorm (3,), terwijl m[:, 1:2] vorm (3, 1) heeft. Beide selecteren 2, 5 en 8, maar alleen de tweede behoudt een kolomas. Dit verschil wordt belangrijk als je arrays met andere vormen aftrekt of vermenigvuldigt.

Dezelfde regel geldt ook buiten tabellen. Als t.shape gelijk is aan (2, 3, 4), heeft t[0] vorm (3, 4), heeft t[0, 1] vorm (4,) en heeft t[:, :, 0] vorm (2, 3). Assen aan het eind die in de index zijn weggelaten, worden volledig geselecteerd.

Wijzig de geselecteerde posities

Een toekenning via een index schrijft in de bestaande array. a[1:3] = 0 vervangt beide geselecteerde waarden door nul; de scalaire waarde wordt op de hele selectie toegepast. m[0] = [0, 0, 0] vervangt een volledige rij. De toegekende waarden moeten passen bij de vorm van de selectie en worden geconverteerd naar het datatype ervan.

Voor vier leerlingen en drie toetsen:

scores = np.array([[78, 85, 92], [64, 70, 58],
                   [88, 91, 95], [72, 68, 80]])

scores[2] is de uitvoer [88 91 95] van de derde leerling. scores[:, -1] geeft de resultaten van de laatste toets [92 58 95 80]. scores[1:3, :2] geeft [[64 70] [88 91]]: twee leerlingen, elk met behoud van twee toetskolommen.

Belangrijkste punten

  • Indexen beginnen bij 0; negatieve indexen tellen vanaf het einde.
  • Deelbereiken sluiten de stoppositie uit en kunnen bij een arraygrens worden ingekort.
  • Gebruik door komma's gescheiden selectors voor afzonderlijke assen.
  • Een gehele index verwijdert een as; een deelbereik behoudt die.
  • Een toekenning via een index wijzigt de geselecteerde waarden.

2.2 Selecteer met lijsten van posities en onderscheid weergaven van kopieën

Een selectie kan gegevens delen met de oorspronkelijke array of eigen, onafhankelijke gegevens hebben. Als je weet welke van de twee je hebt, voorkom je dat wijzigingen in een kleine selectie onverwacht een grotere tabel veranderen.

Onderscheid een alias, een weergave en een kopie
CodeRelatieEffect van een wijziging in b
b = aTwee namen voor één objectWijzigt a
b = a[2:5]Een weergave van een deelbereik die gegevens deeltWijzigt het overeenkomstige deel van a
b = a[2:5].copy()Onafhankelijke gegevensLaat a ongewijzigd

Voor a = np.arange(6) en b = a[2:5] maakt de toekenning b[0] = 99 de array a gelijk aan [0 1 99 3 4 5]. De eerste positie van de weergave verwijst naar positie 2 in het origineel. Dit verschilt van een deelbereik van een Python-lijst, dat een nieuwe lijst maakt.

Kopieer voordat je wijzigingen aanbrengt als het origineel intact moet blijven. Een kleine bewaarde weergave kan ook een grote oorspronkelijke gegevensbuffer in het geheugen houden; door dat kleine deel te kopiëren, kan het zelfstandig bestaan.

Selecteer willekeurige posities

Indexering met indexarrays gebruikt een lijst of array van gehele getallen. Hiermee kun je posities in een andere volgorde zetten en herhalen:

a = np.array([10, 20, 30, 40, 50])
a[[4, 0, 0]]
# array([50, 10, 10])

Voor m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) selecteert m[[0, 2]] de eerste en derde rij. m[:, [2, 0]] selecteert de laatste en eerste kolom in die volgorde, wat [[3 1] [6 4] [9 7]] geeft.

Twee lijsten met gehele indexen in één index selecteren gepaarde coördinaten. m[[0, 2], [1, 2]] koppelt rij 0 aan kolom 1 en rij 2 aan kolom 2, wat [2 9] oplevert. Dit neemt niet alle combinaties. Gebruik het volgende om het blok van beide rijen en beide kolommen te krijgen:

m[np.ix_([0, 2], [1, 2])]
# array([[2, 3], [8, 9]])

Als je eerst de rijen en daarna de kolommen selecteert, m[[0, 2]][:, [1, 2]], krijg je hetzelfde blok.

Lezen en toekennen gedragen zich anders

Indexering met indexarrays en booleaanse filtering geven kopieën terug. Als c = a[[0, 1]], blijft a ongewijzigd wanneer je c[0] wijzigt. Maar a[[0, 1]] = -1 schrijft rechtstreeks naar die oorspronkelijke posities. Een opgeslagen selectie en een toekenning via een index zijn verschillende bewerkingen.

Dit verklaart ook waarom geketende wijzigingen de bron soms niet bereiken. In a[[0, 1]][0] = -1 is de eerste selectie al een tijdelijke kopie. De laatste schrijfbewerking wijzigt die tijdelijke array, niet a.

Controleer gedeeld geheugengebruik direct

np.shares_memory(x, y) controleert of twee arrays overlappen in het geheugen. De functie geeft waar terug voor een gewoon niet-leeg deelbereik en onwaar voor een kopie door indexering met indexarrays. Het attribuut base kan aangeven welk object eigenaar is van het onderliggende geheugen, maar hoeft niet de array aan te wijzen waaruit je het laatst een deelbereik nam. Als a = np.arange(6), b = a[2:5] en c = b[0:2], dan is c.base is a waar en c.base is b onwaar. Gebruik shares_memory als je specifiek wilt weten of twee arrays gegevens delen.

Belangrijkste punten

  • Een toekenning maakt een alias voor een array; een gewoon deelbereik deelt de gegevens.
  • Gebruik .copy() voor een onafhankelijke selectie.
  • Indexering met indexarrays behoudt de gevraagde volgorde en staat herhalingen toe.
  • Twee lijsten met gehele indexen koppelen coördinaten; np.ix_ selecteert alle combinaties.
  • Lezen met indexarrays maakt een kopie, maar directe toekenningen via indexen wijzigen de bron.
  • Gebruik np.shares_memory om te controleren of arrays geheugen delen.

2.3 Filter op voorwaarden met booleaanse maskers en np.where

Een booleaans masker legt vast welke waarden aan een voorwaarde voldoen. Zodra een masker bestaat, kun je dezelfde waar-of-onwaarbeslissingen gebruiken om waarden te selecteren, gebeurtenissen te tellen of vervangende waarden te kiezen.

Maak een masker en pas het toe
t = np.array([18.5, 22.0, 15.2, 25.8, 21.1])
warm = t > 20
t[warm]
# array([22. , 25.8, 21.1])

De vergelijking levert [False True False True True] op. Booleaanse indexering behoudt de posities waar de waarde waar is en geeft een kopie terug. Een 1-dimensionaal masker dat op een as wordt gebruikt, moet dezelfde lengte hebben als die as.

Gebruik & voor en, | voor of en ~ voor niet om voorwaarden te combineren. Zet elke vergelijking tussen haakjes:

comfortable = (t > 18) & (t < 23)
t[comfortable]
# array([18.5, 22. , 21.1])

De Python-operatoren and en or proberen één waarheidswaarde uit een hele array te halen en dat mislukt bij arrays met meerdere elementen. Als je de haakjes weglaat, verandert ook hoe Python de expressie groepeert, omdat bitsgewijze operatoren vóór vergelijkingen worden toegepast.

Tel, meet of toets voorwaarden

True draagt 1 bij en False draagt 0 bij. warm.sum() is 3 en warm.mean() is 0,6, het aandeel dagen boven 20 °C. np.count_nonzero(warm) telt ook de items die waar zijn. warm.any() vraagt of minstens één dag warm is; warm.all() vraagt of elke dag warm is.

Deze bewerkingen beantwoorden andere vragen dan t[warm].mean(), dat de gemiddelde temperatuur op warme dagen berekent. Het gemiddelde van een masker meet een aandeel; het gemiddelde van geselecteerde metingen behoudt de eenheid van de meting.

Vervang waarden of kies tussen mogelijkheden

Een toekenning via een masker wijzigt de geselecteerde posities. Met t2 = t.copy() verhoogt de regel t2[t2 < 16] = 16 lage metingen tot 16. np.clip(t, 16, 25) geeft een nieuwe array terug die aan beide kanten is begrensd, [18.5 22. 16. 25. 21.1].

np.where(condition, x, y) maakt een nieuw resultaat met x op posities waar de voorwaarde waar is en y op posities waar die onwaar is. np.where(t > 20, 'warm', 'cool') levert op elke oorspronkelijke positie een label. Filteren maakt het resultaat daarentegen korter. Met alleen een voorwaarde geeft np.where(t > 20) een tuple van indexarrays terug, hier (array([1, 3, 4]),).

Behoud waarden of volledige records

Een masker met dezelfde vorm als een 2-dimensionale array haalt overeenkomende elementen op als één platte vector. In m[m > 5] gaat de rijstructuur verloren. Om hele records te behouden, leid je per rij één booleaanse waarde af uit een kolom:

scores = np.array([[78, 85, 92], [64, 70, 58],
                   [88, 91, 95], [72, 68, 80]])
scores[scores[:, 2] >= 90]
# array([[78, 85, 92], [88, 91, 95]])
Zoek ontbrekende waarden expliciet

NaN is bij vergelijking zelfs niet gelijk aan zichzelf. Gelijkheids- en volgordevergelijkingen met NaN zijn onwaar; ongelijkheid is waar. Daarom herkennen noch x == np.nan noch x != np.nan aanwezige en ontbrekende items correct. np.isnan(x) markeert ontbrekende posities en x[~np.isnan(x)] behoudt aanwezige waarden.

Belangrijkste punten

  • Een masker bevat één waar-of-onwaarbeslissing per getoetste positie.
  • Combineer vergelijkingen met &, | en ~ en zet de vergelijkingen tussen haakjes.
  • De som van een masker telt het aantal overeenkomsten; het gemiddelde geeft hun aandeel.
  • Gebruik een masker met de lengte van de rijas om hele records te filteren.
  • np.where kiest op elke positie een waarde.
  • Gebruik np.isnan om NaN te vinden.
3

Wijzig de vorm van arrays, transponeer ze en voeg ze samen

Een bruikbare arrayvorm laat zien hoe gegevens bij elkaar horen: maanden binnen kwartalen, metingen binnen records of batches binnen een grotere verzameling. Rangschik waarden opnieuw door de vorm te wijzigen, verwissel de rollen van assen door te transponeren en voeg assen met lengte één toe als een vector de rol van rij of kolom moet krijgen. Door samen te voegen en op te splitsen kun je die groepen vervolgens combineren of scheiden, waarbij controles van de vorm de bedoelde structuur intact houden.

3.1 Wijzig de vorm van een array en verwissel de assen

Als je de vorm wijzigt, verandert de manier waarop waarden over assen zijn gegroepeerd. De vorm wijzigen, transponeren en een as toevoegen doen elk iets anders, ook als sommige dezelfde uiteindelijke vorm opleveren.

Wijzig de vorm zonder het aantal elementen te veranderen
a = np.arange(6)
r = a.reshape(2, 3)
# array([[0, 1, 2], [3, 4, 5]])

De standaardvolgorde vult steeds één rij: de laatste as verandert het snelst. Als je dezelfde waarden de vorm (3, 2) geeft, krijg je [[0 1] [2 3] [4 5]]. Het product van de nieuwe dimensies moet gelijk zijn aan het oorspronkelijke aantal elementen. Twaalf elementen passen in (3, 4), maar niet in (5, 3).

Eén dimensie kan -1 zijn, zodat NumPy de lengte ervan afleidt. np.arange(12).reshape(-1, 3) geeft vier rijen van drie; reshape(2, -1) geeft twee rijen van zes. Twee onbekende dimensies zijn niet toegestaan, omdat hun afzonderlijke lengtes niet alleen uit het totaal kunnen worden bepaald.

Transponeren verwisselt de assen

Voor r hierboven is r.T gelijk aan [[0 3] [1 4] [2 5]], met vorm (3, 2). Elke oorspronkelijke kolom is nu een rij. Die rangschikking verschilt van r.reshape(3, 2), hoewel de vormen van de resultaten gelijk zijn.

BewerkingWat er met r gebeurt
r.reshape(3, 2)Leest waarden rij voor rij en groepeert ze opnieuw
r.TVerwisselt de rollen van rij en kolom

Transponeren is handig als de volgende bewerking de omgekeerde asvolgorde nodig heeft. De vorm wijzigen is handig als een reeks al een betekenisvolle groepering heeft, zoals maanden die in kwartalen zijn gegroepeerd.

Transponeren maakt van een 1-dimensionale array geen kolom

v = np.arange(3) heeft maar één as, dus v.T heeft nog steeds vorm (3,). Voeg expliciet een as toe:

column = v[:, np.newaxis]  # shape (3, 1)
row = v[np.newaxis, :]     # shape (1, 3)

v.reshape(-1, 1) en np.expand_dims(v, 1) maken ook een kolom. np.squeeze(column) verwijdert de as met lengte één en geeft vorm (3,) terug. Een as toevoegen verandert geen waarden, maar bepaalt hoe ze bij latere berekeningen moeten worden uitgelijnd.

Afvlakken en gedeeld geheugengebruik

r.ravel() en r.flatten() geven beide de waarden in een 1-dimensionaal resultaat. ravel geeft waar mogelijk een weergave terug; flatten kopieert altijd. reshape(-1) is een andere manier om een 1-dimensionale rangschikking te vragen, maar of die geheugen deelt, hangt af van de indeling van de invoer. Bij het wijzigen van de vorm kan een kopie nodig zijn; transponeren deelt gegevens in de arrayweergave. Gebruik .copy() als onafhankelijke opslag nodig is.

Groepeer maandwaarden in kwartalen

Voor monthly = np.array([120, 135, 150, 160, 155, 170, 180, 175, 165, 150, 140, 130]) maakt monthly.reshape(4, 3) vier kwartaalrijen met elk drie maanden. Elke rij optellen met .sum(axis=1) geeft [405 485 520 420]. Het eerste totaal is 120 + 135 + 150 = 405. Het wijzigen van de vorm werkt omdat de chronologische invoer de maanden van elk kwartaal al bij elkaar zet.

Belangrijkste punten

  • De vorm wijzigen behoudt het aantal elementen en volgt standaard de rijgewijze volgorde.
  • Eén dimensie met -1 kan worden afgeleid.
  • Transponeren verwisselt de rollen van assen en kan verschillen van een vormwijziging met dezelfde uitkomstvorm.
  • Gebruik een nieuwe as om van een vector een rij of kolom te maken.
  • flatten kopieert; ravel en het wijzigen van de vorm kunnen gegevens delen.

3.2 Voeg arrays samen en splits ze op

Samenvoegen combineert waarden uit meerdere arrays. Opsplitsen verdeelt één array in stukken. Bepaal eerst of de bewerking een bestaande as moet uitbreiden of een nieuwe as moet toevoegen.

Voeg samen langs een bestaande as

np.concatenate([a, b], axis=0) voegt vectoren achter elkaar samen. Samenvoegen van [1 2] met [3 4 5] geeft [1 2 3 4 5].

Voor twee arrays met elk vorm (2, 3) voegt as 0 rijen toe en geeft (4, 3). As 1 voegt kolommen toe en geeft (2, 6). Alleen de samenvoegas mag in lengte verschillen. Daarom kun je vormen (2, 3) en (2, 2) langs as 1 samenvoegen tot (2, 5), maar niet langs as 0, omdat hun aantallen kolommen verschillen.

Je moet de arrays samen als een reeks doorgeven, zoals [a, b]. Samenvoegen maakt een nieuwe gecombineerde array en kopieert de gegevens van de invoerarrays.

Stapel langs een nieuwe as

Voor p = np.array([1, 2, 3]) en q = np.array([4, 5, 6]):

ExpressieVormRangschikking
np.concatenate([p, q])(6,)Eén langere vector
np.stack([p, q])(2, 3)Eén vector per rij
np.stack([p, q], axis=1)(3, 2)Eén vector per kolom

stack vereist gelijke invoervormen en voegt een as toe. concatenate behoudt het aantal assen. De hulpfuncties drukken veelgebruikte rangschikkingen uit: vstack([p, q]) maakt rijen, hstack([p, q]) voegt deze 1-dimensionale invoerarrays achter elkaar samen en column_stack([p, q]) maakt kolommen. Door het gedrag van hstack bij 1-dimensionale invoer is de naam alleen niet genoeg om een tabel te voorspellen.

Splits op grenzen of op aantal delen

np.split(np.arange(10), [3, 7]) splitst vóór posities 3 en 7 en levert [0 1 2], [3 4 5 6] en [7 8 9] op. De grensposities zijn geen lengtes van de delen.

Met een geheel getal als tweede argument vraag je juist om gelijke delen: np.split(x, 3) vraagt om drie gelijke stukken. Tien elementen kun je niet gelijk verdelen in drie stukken met een geheel aantal elementen, dus dit geeft een ValueError. np.array_split(np.arange(10), 3) staat ongelijke lengtes toe en levert 4, 3 en 3 op. Deze aanroepen geven een verzameling arrays terug, niet één array met een nieuwe stapelas.

Maak een tabel met metingen
h = np.array([1.62, 1.75, 1.80])  # meters
w = np.array([55.0, 72.5, 80.0])  # kilograms
data = np.column_stack([h, w])

Vorm (3, 2) betekent drie personen met lengte en massa in kolommen. De expressie data[:, 1] / data[:, 0] ** 2 berekent voor elke rij de massa gedeeld door de lengte in het kwadraat en geeft ongeveer 21,0, 23,7 en 24,7 kg/m². Het is essentieel dat de twee meetarrays dezelfde volgorde van personen aanhouden.

Als invoer in batches binnenkomt, verzamel je de batcharrays in een Python-lijst en roep je één keer concatenate aan. Als je tijdens elke lusgang een groeiende array opnieuw samenvoegt, worden de bestaande gegevens telkens opnieuw gekopieerd.

Belangrijkste punten

  • Concatenatie breidt een as uit; stapelen voegt er één toe.
  • Bij concatenatie moeten de dimensies behalve de samenvoegdimensie overeenkomen.
  • Gebruik column_stack om bij elkaar passende vectoren in tabelkolommen om te zetten.
  • Splitsposities zijn grenzen; een geheel getal als aantal delen vraagt om gelijke stukken.
  • array_split staat ongelijke lengtes van de delen toe.
  • Verzamel eerst batches en voeg ze één keer samen.
4

Vervang lussen door gevectoriseerde berekeningen, ufuncs en broadcasting

Met expressies voor volledige arrays kun je numeriek werk beschrijven zonder voor elke waarde een Python-lus te schrijven. Begin met berekeningen op overeenkomstige posities, pas daarna wiskundige functies van NumPy toe en combineer verschillende vormen via broadcasting. Aan de vormen kun je aflezen welke waarden worden gekoppeld en welke worden herhaald. Conversieregels, ongeldige invoer en waarschuwingen bij deling zijn ook van belang als een korte expressie veel berekeningen tegelijk uitvoert.

4.1 Reken elementsgewijs in plaats van met lussen

Vectorisatie drukt een berekening uit voor volledige arrays. NumPy voert het herhaalde werk per element uit in gecompileerde code, zodat de Python-expressie dicht bij de bedoelde berekening kan blijven.

Zet een lus om in een berekening op overeenkomstige posities
prices = np.array([2.50, 4.00, 1.20])
qty = np.array([3, 1, 5])
line_totals = prices * qty
order_total = line_totals.sum()

De producten zijn [7.5 4. 6.] en hun som is 17,5. Elke prijs wordt gekoppeld aan het bijbehorende aantal. Een Python-lus die een totaal bijwerkt, levert hetzelfde resultaat op, maar laat Python elk paar afzonderlijk verwerken.

Alle rekenoperatoren werken elementsgewijs: +, -, *, /, //, % en **. Een scalaire waarde wordt op elk item toegepast. 10 - np.array([1, 2, 3]) geeft [9 8 7]; de volgorde van de operanden blijft van belang. Twee arrays hebben gelijke vormen nodig of vormen die compatibel zijn voor broadcasting.

Houd elementsgewijze producten en matrixproducten uit elkaar

* vermenigvuldigt overeenkomstige items. Voor A = np.array([[1, 2], [3, 4]]) en B = np.array([[5, 6], [7, 8]]) geeft A * B de uitvoer [[5 12] [21 32]]. Matrixvermenigvuldiging gebruikt @ en zou [[19 22] [43 50]] geven. Kies * voor gekoppelde metingen zoals prijs en aantal.

Vergelijkingen geven ook één antwoord per positie

a == b levert een booleaanse array op. De expressie vraagt niet of twee arrays als volledige objecten gelijk zijn. Een if-instructie heeft één waarheidswaarde nodig, dus if a == b: mislukt bij resultaten met meerdere elementen. np.array_equal(a, b) toetst of volledige arrays exact gelijk zijn. Voor benaderde decimale getallen toetst np.allclose(a, b) of ze binnen een tolerantie overeenkomen.

Begrijp waarschuwingen bij deling

Met de standaardfoutinstellingen van NumPy levert deling van drijvendekommagetallen door nul een waarschuwing en speciale waarden op:

np.array([1.0, -1.0, 0.0]) / 0
# array([ inf, -inf, nan])

np.isfinite herkent resultaten die noch oneindig noch NaN zijn. Geheeltallige deling door nul met afronding naar beneden geeft daarentegen gehele nullen terug met een waarschuwing. Die nullen lijken eindig, dus controleer gehele noemers met (d == 0).any() voordat je zo deelt. Een waarschuwing verdient aandacht, ook als het programma doorgaat.

Bepaal of je in het bestaande geheugen wilt wijzigen

a += value wijzigt de bestaande opslag en behoudt het datatype. Als a een array met gehele getallen is, geeft a += 0.5 een conversiefout, omdat het drijvendekommaresultaat volgens de conversieregel van die bewerking niet kan worden opgeslagen. a = a + 0.5 maakt een drijvendekommaresultaat en bindt a daaraan. Dit verschilt van het toekennen van één decimaal getal aan een geheel element, waarbij het decimale deel ongemerkt kan worden afgekapt.

Bouw een expressie met meerdere stappen

Voor old = np.array([2.50, 4.00, 8.00]) en new = np.array([3.00, 3.00, 8.00]) geeft (new - old) / old * 100 de uitvoer [20. -25. 0.]. Bepaal eerst elke verandering, deel die door de oorspronkelijke waarde en druk de verhouding vervolgens uit als percentage. De tekens tonen een stijging, een daling en geen verandering. Voor deze percentageberekening mogen de oorspronkelijke waarden niet nul zijn.

Belangrijkste punten

  • Gevectoriseerde operatoren rekenen elementsgewijs op volledige arrays.
  • * koppelt items; @ voert een matrixproduct uit.
  • Voor vergelijkingen van volledige arrays is een functie nodig die één resultaat geeft.
  • Controleer noemers en bekijk waarschuwingen bij deling.
  • Berekeningen in het bestaande geheugen behouden het datatype van de bestemming.

4.2 Pas universele functies toe op volledige arrays

Een universele functie, of ufunc, past een berekening afzonderlijk toe op elke arraypositie. Deze functies breiden vectorisatie uit van gewoon rekenen naar wortels, logaritmen, afronding, vergelijkingen en andere numerieke bewerkingen.

Kies een functie die met arrays werkt

Unaire ufuncs nemen één invoer. np.sqrt(np.array([1, 4, 9])) geeft [1. 2. 3.] en np.abs(np.array([-2, 3])) geeft [2 3]. np.exp is de exponentiële functie, np.log is de natuurlijke logaritme en np.log10 is de logaritme met grondtal 10. Zo is np.exp(0) gelijk aan 1,0 en np.log10(1000) aan 3,0.

De Python-module math werkt op afzonderlijke getallen. math.sqrt(np.array([1, 4])) kan niet beide wortels berekenen en geeft een typefout. Gebruik voor numerieke arrays de versie van NumPy. Ook operatoren roepen ufuncs aan: a + b komt overeen met np.add(a, b) en a * b met np.multiply(a, b).

Vergelijk overeenkomstige waarden of reduceer een hele array

Binaire ufuncs nemen twee invoerwaarden. np.maximum([1, 5, 3], [4, 2, 6]) geeft [4 5 6] en kiest op elke positie de grootste waarde. np.minimum kiest de kleinste en np.power verheft overeenkomstige grondtallen tot machten.

np.maximum(x, 0) zet negatieve items in een nieuw resultaat op nul. Dit verschilt van np.max(x), een aggregatie die één grootste waarde teruggeeft. Voor [1, 5, 3] geeft max de waarde 5; maximum heeft nog een invoer nodig en behoudt de elementsgewijze structuur.

Rond af volgens de bedoelde regel
FunctieRegelResultaat voor −2,5
np.floorNaar beneden, richting min oneindig−3,0
np.ceilNaar boven, richting plus oneindig−2,0
np.truncRichting nul−2,0
np.roundNaar de dichtstbijzijnde waarde; exacte halven naar even−2,0

np.round(x, 2) behoudt twee decimalen. Exacte halven volgen de regel voor even getallen: np.round([0.5, 1.5, 2.5]) geeft [0. 2. 2.]. Binaire benadering kan waarden beïnvloeden die decimaal weergegeven precies halverwege lijken te liggen. Houd daarom bij de interpretatie van weergegeven decimalen rekening met hun drijvendekommaweergave.

Controleer waarden buiten het domein van een functie

Voor reële drijvendekomma-invoer geeft np.sqrt(-1.0) de waarde NaN terug met een waarschuwing, terwijl np.log(0.0) bij de standaardfoutinstellingen min oneindig teruggeeft met een waarschuwing. Anders dan bij math.sqrt(-1) stoppen deze aanroepen normaal gesproken niet met een domeinfout. Controleer de invoer als de wiskundige bewerking een beperkt bereik vereist. np.isnan markeert NaN; np.isfinite markeert waarden die noch NaN noch oneindig zijn; np.isclose vergelijkt waarden met een tolerantie.

Combineer ufuncs tot een bruikbare berekening

Bereken voor coördinatenarrays x = np.array([3, 5, 8]) en y = np.array([4, 12, 15]) de afstand tot de oorsprong met np.sqrt(x ** 2 + y ** 2). Kwadrateren geeft [9 25 64] en [16 144 225]; optellen geeft [25 169 289]; de wortels zijn [5. 13. 17.]. np.hypot(x, y) berekent die afstanden rechtstreeks.

Belangrijkste punten

  • Ufuncs voeren op elke positie numerieke bewerkingen uit.
  • Gebruik NumPy-functies voor arrays, ook voor wortels en logaritmen.
  • maximum vergelijkt posities; max reduceert waarden.
  • Naar beneden afronden, naar boven afronden, afkappen en afronden volgen verschillende regels.
  • Controleer op NaN en oneindig na ongeldige bewerkingen met reële waarden.

4.3 Combineer arrays met verschillende vormen via broadcasting

Broadcasting maakt het mogelijk om arrays met verschillende vormen te gebruiken in elementsgewijze berekeningen. De uitgelijnde assen bepalen welke waarden worden gekoppeld en welke worden herhaald.

Vergelijk dimensies vanaf rechts

Lijn vormen rechts uit. Elk paar aslengtes moet gelijk zijn of één lengte moet gelijk zijn aan 1. Ontbrekende assen aan het begin tellen als lengte 1. Een as met lengte één wordt denkbeeldig uitgebreid om overeen te komen met de andere lengte; NumPy hoeft de herhaalde invoerwaarden niet te kopiëren.

Voor (4, 3) en (3,) komen de laatste lengtes overeen: 3. De ontbrekende eerste dimensie gedraagt zich als 1 en wordt uitgebreid tot 4. Het resultaat is (4, 3): de vector wordt op elke rij toegepast. (4, 3) en (4,) werken niet, omdat de laatste lengtes 3 en 4 verschillen en geen van beide 1 is. Een niet-compatibel paar geeft een ValueError.

Centreer of standaardiseer kolommen
X = np.array([[1, 10], [2, 20], [3, 30]])
centered = X - X.mean(axis=0)

De kolomgemiddelden zijn [2. 20.], met vorm (2,). Ze lijnen uit met de laatste as van (3, 2), wat [[-1. -10.] [0. 0.] [1. 10.]] geeft. Door het gecentreerde resultaat te delen door X.std(axis=0) standaardiseer je elke kolom. Dit levert in beide kolommen ongeveer −1,22, 0 en 1,22 op. Voor deze deling mag de spreiding van geen enkele kolom nul zijn.

Behoud een as voor rijberekeningen

Gebruik een tabel met scores van vier leerlingen en drie toetsen:

scores = np.array([[78, 85, 92], [64, 70, 58],
                   [88, 91, 95], [72, 68, 80]])

scores.mean(axis=1) heeft vorm (4,). Die vorm kan niet via broadcasting als één gemiddelde per rij met (4, 3) worden gecombineerd. Behoud de verwijderde as:

row_mean = scores.mean(axis=1, keepdims=True)
centered = scores - row_mean

row_mean heeft nu vorm (4, 1). De eerste 4 komt overeen met de rijen; de laatste 1 wordt uitgebreid over drie kolommen. scores.mean(axis=1)[:, np.newaxis] maakt dezelfde vorm. Als je van de rij [78, 85, 92] het gemiddelde 85 aftrekt, krijg je [-7. 0. 7.].

Gebruik dezelfde regel om een tabel te maken

np.arange(1, 4)[:, np.newaxis] * np.arange(1, 5) combineert (3, 1) en (4,). Beide arrays worden uitgebreid tot de resultaatvorm (3, 4), wat [[1 2 3 4] [2 4 6 8] [3 6 9 12]] oplevert.

Uitbreiding kan ook onbedoeld plaatsvinden. Een kolom met vorm (3, 1) min een vector met vorm (3,) maakt alle negen paarsgewijze verschillen, met vorm (3, 3). Als je drie overeenkomstige verschillen bedoelde, geef je beide invoerarrays vorm (3,), bijvoorbeeld met column.ravel().

Weeg elke kolom vóór het optellen

Voor dezelfde scoretabel en w = np.array([0.2, 0.3, 0.5]) past scores * w de drie gewichten toe op elke rij. Optellen met .sum(axis=1) geeft [87.1 62.8 92.4 74.8]. Het eerste resultaat is 15,6 + 25,5 + 46,0 = 87,1.

Belangrijkste punten

  • Lijn vormen vanaf rechts uit; gekoppelde lengtes moeten gelijk zijn of één ervan moet 1 zijn.
  • Een as met lengte één bepaalt de richting van de uitbreiding.
  • Kolomsamenvattingen lijnen meestal direct uit met een tabel.
  • Behoud rijsamenvattingen als kolommen met keepdims=True.
  • Broadcasting kan onbedoeld een tabel met paarsgewijze combinaties maken.
  • Weeg kolommen voordat je over elke rij reduceert.
5

Vat arrays samen met aggregaties langs assen

Een tabel kan een algemeen totaal, één samenvatting per record of één samenvatting per variabele opleveren. Bepaal welke as je wilt samenvoegen en kies vervolgens een statistische maat die je vraag beantwoordt. Posities, cumulatieve totalen en rangordes bieden verschillende manieren om naar de gegevens te kijken. Ontbrekende waarden en voorwaarden vragen om eigen keuzes, omdat filteren of aanvullen zowel kan veranderen welke waarnemingen meetellen als wat het resultaat betekent.

5.1 Aggregeer een volledige array of langs één as

Een aggregatie combineert waarden tot minder resultaten: een totaal, gemiddelde, uiterste of spreidingsmaat. De keuze van de as hoort bij de keuze van de vraag, omdat die bepaalt welke groepen waarden worden gecombineerd.

Voeg de opgegeven as samen

Voor een tabel met vorm (4, 3) met vier leerlingen en drie toetsen gebruikt een aggregatie zonder axis alle 12 waarden. scores.sum() geeft één totaal. scores.mean(axis=0) voegt de leerlingenas samen en laat drie toetsgemiddelden over. scores.mean(axis=1) voegt de toetsas samen en laat vier leerlinggemiddelden over.

scores = np.array([[78, 85, 92], [64, 70, 58],
                   [88, 91, 95], [72, 68, 80]])

De totale som is 941. De kolomgemiddelden zijn [75.5 78.5 81.25]; de rijgemiddelden zijn ongeveer [85. 64. 91.33 73.33]. Vraag je af welke as moet verdwijnen. Als je zegt “as 0 betekent elke rij”, draai je de bewerking om: as 0 combineert rijen.

Kies welke grootheid je wilt terugkrijgen
BewerkingResultaattype
sum, prodTotaal of product
meanRekenkundig gemiddelde
min, maxUiterste waarde
argmin, argmaxPositie van een uiterste
std, varStandaardafwijking of variantie

Methoden zoals a.sum() en functies zoals np.sum(a) drukken dezelfde basisbewerking uit. Met NumPy-methoden vermijd je het andere gedrag van de ingebouwde Python-functies. Zo telt sum(scores) van Python rijarrays op tot kolomtotalen, terwijl scores.sum() alle items combineert. max(scores) van Python probeert rijen te vergelijken en geeft een fout over een dubbelzinnige waarheidswaarde.

Posities verschillen van waarden

scores.mean(axis=1).argmax() is 2: de derde leerling heeft het hoogste gemiddelde. argmax geeft de eerste positie terug als maxima gelijk zijn. Zonder as geeft de functie op een tabel een rijgewijs afgevlakte index terug; scores.argmax() is 8. np.unravel_index(8, scores.shape) haalt de coördinaat (2, 2) terug.

Gebruik keepdims=True als een samenvatting moet uitlijnen met de oorspronkelijke tabel. scores.sum(axis=1, keepdims=True) heeft vorm (4, 1) en is daardoor geschikt voor één normalisatiewaarde per rij. Zonder deze instelling heeft het resultaat vorm (4,).

Behoud tussentotalen als volgorde van belang is

np.cumsum([3, 1, 4, 1, 5]) geeft [3 4 8 9 14]. Elke positie is het totaal tot en met dat punt. np.cumprod([1, 2, 3, 4]) geeft op dezelfde manier [1 2 6 24]. np.diff([3, 1, 4, 1, 5]) geeft de vier veranderingen tussen aangrenzende waarden [-2 3 -3 4]. Geef bij een tabel axis=1 op voor afzonderlijke cumulatieve totalen over de rijen.

Vermeld de afspraak voor spreiding

std en var delen het totaal van de gekwadrateerde afwijkingen standaard door het aantal waarden: ddof=0. Gebruik ddof=1 voor de steekproefformule, waarvan de deler één kleiner is. Voor [2, 4, 4, 4, 5, 5, 7, 9] is het gemiddelde 5, de standaardafwijking met de standaardinstelling 2,0 en de steekproefstandaardafwijking ongeveer 2,14. Een rapport moet duidelijk maken welke afspraak het gebruikt.

Belangrijkste punten

  • Het argument axis geeft de as aan die wordt samengevoegd.
  • Zonder as krijg je één samenvatting over de hele array.
  • argmin en argmax geven posities terug, waaronder de eerste positie bij gelijke uitersten.
  • keepdims=True behoudt gereduceerde assen met lengte 1.
  • Cumulatieve functies behouden tussenresultaten.
  • NumPy gebruikt standaard ddof=0; met ddof=1 kies je de deler voor een steekproef.
  • Gebruik bij arrays bij voorkeur NumPy-aggregaties in plaats van ingebouwde Python-functies.

5.2 Gebruik medianen, percentielen, sortering en unieke waarden

Samenvattingen op basis van volgorde beschrijven waar waarden in een gesorteerde verdeling liggen. Sorteren helpt ook bij het rangschikken van records, maar bij een tabel moet je zorgvuldig te werk gaan om de velden van elk record bij elkaar te houden.

Bepaal het midden en de kwartielen

Voor x = np.array([12, 15, 11, 20, 18, 14]) is de gesorteerde volgorde [11 12 14 15 18 20]. Bij zes waarden neemt np.median(x) het gemiddelde van de middelste twee, 14 en 15, wat 14,5 geeft. Bij een oneven aantal is de mediaan de ene middelste waarde.

np.percentile(x, q) accepteert een percentage van 0 tot 100. np.quantile(x, q) accepteert de overeenkomstige fractie van 0 tot 1. De standaard lineaire interpolatie kan een waarde tussen waarnemingen opleveren. Bij zes waarden is de positie van het 25e percentiel, geteld vanaf nul, 0,25 × 5 = 1,25. Die ligt op een kwart van de afstand van 12 naar 14 en geeft 12,5. Het 50e en 75e percentiel zijn 14,5 en 17,25, dus de interkwartielafstand is 4,75.

De mediaan is beter bestand tegen een extreme waarde dan het gemiddelde. Als je 200 aan deze gegevens toevoegt, verschuift het gemiddelde van 15,0 naar ongeveer 41,4; de mediaan verschuift van 14,5 naar 15,0. Geen van beide maten beschrijft op zichzelf de hele verdeling.

Kies gesorteerde gegevens of sorteerposities

np.sort(x) geeft een gesorteerde kopie terug. x.sort() wijzigt x en geeft None terug, dus y = x.sort() zet geen gesorteerde waarden in y. Gebruik voor aflopende waarden np.sort(x)[::-1].

Bij een 2-dimensionale array vindt sorteren standaard langs de laatste as plaats, waarbij elke rij afzonderlijk wordt gesorteerd. axis=0 sorteert elke kolom afzonderlijk. Geen van beide bewerkingen sorteert records. Voor tab = np.array([[3, 1], [1, 2], [2, 0]]) geeft np.sort(tab, axis=0) de uitvoer [[1 0] [2 1] [3 2]], waardoor waarden die oorspronkelijk bij elkaar hoorden worden gescheiden.

Om records te behouden, haal je een volgorde uit de sleutelkolom en pas je die toe op hele rijen:

order = tab[:, 0].argsort()
ranked = tab[order]
# array([[1, 2], [2, 0], [3, 1]])

Dezelfde indexvolgorde kan bijbehorende vectoren opnieuw ordenen. Als avg = np.array([85.0, 64.0, 91.33, 73.33]) en names = np.array(['Ana', 'Ben', 'Chen', 'Dara']), rangschikt order = np.argsort(avg)[::-1] de gemiddelden in aflopende volgorde. names[order] geeft ['Chen' 'Ana' 'Dara' 'Ben'].

Tel unieke waarden en controleer of waarden voorkomen

np.unique geeft gesorteerde unieke waarden terug. Met return_counts=True geeft de functie ook de bijbehorende aantallen terug:

colors = np.array(['red', 'blue', 'red', 'green', 'blue', 'red'])
values, counts = np.unique(colors, return_counts=True)

De uitvoer is ['blue' 'green' 'red'] en [2 1 3]. values[counts.argmax()] vindt de meest voorkomende waarde, 'red'. De posities van de aantallen komen overeen met die van de unieke waarden.

np.isin(a, allowed) geeft een masker terug dat aangeeft of waarden in een verzameling voorkomen. Voor a = np.arange(1, 6) geeft np.isin(a, [2, 4]) de uitvoer [False True False True False], klaar om die waarden of de bijbehorende records te selecteren.

Belangrijkste punten

  • De mediaan gebruikt de gesorteerde positie en is bestand tegen extreme waarden.
  • Percentielen gebruiken 0–100; kwantielen gebruiken 0–1.
  • De standaardinterpolatie van percentielen kan tussen waarnemingen uitkomen.
  • np.sort kopieert; .sort() van een array wijzigt de array en geeft None terug.
  • Gebruik posities van argsort om records en bijbehorende arrays uitgelijnd te houden.
  • unique(..., return_counts=True) koppelt unieke waarden aan frequenties.
  • isin maakt een masker dat aangeeft of waarden voorkomen.

5.3 Vat gegevens samen met aandacht voor ontbrekende waarden en voorwaarden

Ontbrekende gegevens en gefilterde deelverzamelingen vragen om een expliciete werkwijze voor het samenvatten. Een numeriek resultaat kan onjuist zijn, ook als de arraybewerking succesvol wordt uitgevoerd: een plaatsvervangende waarde kan als meting worden meegeteld of een lege deelverzameling kan voor een betekenisvol gemiddelde worden aangezien.

Zoek ontbrekende waarden vóór het samenvatten

NaN werkt door in gewone sommen en gemiddelden. Voor x = np.array([3.0, np.nan, 5.0]) geven zowel x.sum() als x.mean() de waarde NaN. np.nansum(x) geeft 8,0 en np.nanmean(x) geeft 4,0, waarbij de ontbrekende positie wordt overgeslagen. Verwante functies zijn nanmax, nanmin, nanstd en nanmedian. Als elke waarde ontbreekt, geeft nanmean NaN terug met een waarschuwing, omdat er geen waargenomen waarden overblijven.

Voor sensormetingen in °C:

r = np.array([21.5, np.nan, 22.1, 23.0, np.nan, 21.9])
missing = np.isnan(r)

missing.sum() is 2, missing.mean() is ongeveer 0,33 en r[~missing] behoudt vier metingen. np.nanmean(r) is 22,125 en gebruikt alleen die vier waarden. De vergelijking r == np.nan zou de ontbrekende metingen niet markeren.

Converteer eerst codes voor ontbrekende waarden

Een getal zoals −999 kan in een invoersysteem ontbrekende gegevens aanduiden. NumPy behandelt het als een echte meting totdat je het vervangt:

v = np.array([12, -999, 15, -999, 9]).astype(float)
v[v == -999] = np.nan
np.nanmean(v)  # 12.0

Converteer eerst naar float, omdat een array met gehele getallen geen NaN kan opslaan. Deze vervanging is alleen geschikt als −999 voor die gegevens is gedefinieerd als code voor ontbrekende waarden.

Aanvullen verandert de verdeling

Als je ontbrekende temperaturen vervangt door nul, wordt het gemiddelde van het voorbeeld 14,75, hoewel er geen temperatuur van nul is gemeten. Als je ze aanvult met het waargenomen gemiddelde, 22,125, blijft dat gemiddelde behouden maar neemt de schijnbare spreiding af. Een aangevulde waarde is een toegevoegde schatting, dus het effect ervan hoort mee te wegen in de analysekeuze.

Voor een 2-dimensionale tabel D vat np.nanmean(D, axis=0) de waargenomen waarden van elke kolom samen. Elke kolom kan een ander aantal hebben. Om rijen met een ontbrekende waarde te verwijderen:

complete = ~np.isnan(D).any(axis=1)
clean_rows = D[complete]

De reductie maakt één beslissing per rij; de ontkenning behoudt rijen zonder ontbrekende items. Met D = np.array([[1., 2.], [np.nan, 4.], [5., np.nan], [7., 8.]]) behoudt dit [[1. 2.] [7. 8.]].

Vat een voorwaarde of een groep samen

Voor temperaturen t berekent t[t > 20].mean() het gemiddelde van alleen de dagen boven 20 °C. Gebruik bij gegroepeerde gegevens een passend labelmasker: met group = np.array(['A', 'B', 'A', 'B', 'A']) en value = np.array([10, 20, 14, 26, 12]) is value[group == 'A'].mean() gelijk aan 12,0 en het overeenkomstige gemiddelde voor B aan 23,0. Doorloop np.unique(group) om dit voor elke groep te herhalen.

Controleer mask.any() voordat je een gefilterde deelverzameling samenvat. Het gemiddelde van een lege selectie is NaN met een waarschuwing, terwijl de som 0 is. Die nul kan een geldig leeg totaal zijn, maar bewijst niet dat er een meting aanwezig was.

Belangrijkste punten

  • Gewone sommen en gemiddelden geven NaN door; varianten die rekening houden met NaN slaan die over.
  • Converteer gedefinieerde codes voor ontbrekende waarden naar NaN in drijvendekommaopslag.
  • Het aanvullen van ontbrekende waarden verandert de statistische maten.
  • Rijgewijze controles op ontbrekende waarden kunnen volledige records aanwijzen.
  • Combineer label- of voorwaardemaskers met aggregaties.
  • Controleer op een lege deelverzameling voordat je het gemiddelde interpreteert.
6

Genereer toevalsgetallen en voer simulaties uit

Willekeurige arrays ondersteunen herhaalbare steekproeven en praktische experimenten. Maak één Generator met een startwaarde, kies een verdeling en uitvoervorm en behoud de relaties tussen records wanneer je gegevens schudt of splitst. Maak in een simulatie de structuur van de proeven expliciet voordat je gebeurtenissen of posities na opeenvolgende stappen berekent. Vergelijk resultaten met eenvoudige exacte gevallen en onderscheid gewone steekproefvariatie van fouten in de code.

6.1 Trek reproduceerbare aselecte steekproeven met een Generator

Een toevalsgenerator ondersteunt steekproeven, schudden en simulatie. Een startwaarde maakt de begintoestand herhaalbaar, zodat je een analyse opnieuw kunt uitvoeren terwijl je de werking onderzoekt.

Maak één Generator en gebruik die opnieuw
rng = np.random.default_rng(42)

NumPy beveelt deze Generator-interface aan voor nieuwe code. De standaard bitgenerator is PCG64. Zonder startwaarde haalt default_rng() nieuwe entropie uit het besturingssysteem. Oudere aanroepen zoals np.random.seed en np.random.rand gebruiken een gedeelde globale toestand; met Generator-objecten kan een analyse de eigen toestand rechtstreeks beheren.

Pseudowillekeurige waarden komen uit een deterministisch algoritme. Dezelfde begintoestand en dezelfde reeks aanroepen reproduceren de getallenreeks in dezelfde omgeving. Elke trekking verandert de toestand. Als je tijdens elke lusgang een nieuwe Generator met startwaarde 42 maakt, begint de reeks opnieuw en worden dezelfde eerste trekkingen herhaald in plaats van de reeks voort te zetten. Leg naast de startwaarde ook de NumPy-versie en de code vast, omdat compatibiliteit van de reeks tussen versies of in alle omgevingen niet is gegarandeerd. Gebruik voor wachtwoorden of beveiligingstokens de Python-module secrets.

Kies een verdeling en een uitvoervorm
AanroepBetekenis
rng.random(5)Vijf decimale getallen vanaf 0 inclusief tot 1 exclusief
rng.uniform(2, 8, size=5)Vijf trekkingen uit een uniforme verdeling over het interval van 2 tot 8
rng.integers(1, 7, size=10)Tien gehele getallen van 1 tot en met 6
rng.normal(loc=170, scale=10, size=(3, 4))Een 3×4-steekproef uit een normale verdeling

size kan een aantal elementen of een tuple met de vorm zijn. Voor normal is loc het gemiddelde van de verdeling en scale de standaardafwijking ervan. Een variantie van 100 vereist daarom scale=10. Het werkelijke gemiddelde en de werkelijke standaardafwijking van een kleine steekproef hoeven niet exact overeen te komen met de parameters van de verdeling.

Bij trekkingen van gehele getallen is de bovengrens standaard uitgesloten. Voor een dobbelsteen is integers(1, 7) nodig, omdat integers(1, 6) geen 6 kan trekken. integers(1, 6, endpoint=True) neemt de bovengrens mee en modelleert ook een dobbelsteen.

Trek waarden met of zonder teruglegging

rng.choice(['heads', 'tails'], size=5) doet vijf trekkingen met teruglegging. Een waarde kan meerdere keren voorkomen. Gebruik replace=False om verschillende posities te trekken; als je meer posities vraagt dan de populatie heeft, krijg je een ValueError. Kansen kun je opgeven als p=[0.7, 0.3], in dezelfde volgorde als de waarden. Ze moeten samen 1 zijn.

Zonder teruglegging voorkomt dat een invoerpositie twee keer wordt geselecteerd. Als de invoer zelf dubbele waarden bevat, kunnen gelijke waarden nog steeds in de steekproef voorkomen.

Schud records zonder hun velden te scheiden

rng.shuffle(a) herschikt de bestaande array en geeft None terug. rng.permutation(a) geeft een geschudde kopie terug. rng.permutation(10) geeft gehele getallen van 0 tot en met 9 in willekeurige volgorde, bruikbaar als rijindexen.

Bij een 2-dimensionale array is de standaardas 0: volledige rijen bewegen samen. Daardoor blijven de velden van elke waarneming uitgelijnd. Om twee bijbehorende arrays op dezelfde manier te schudden, maak je één permutatie van hun gedeelde recordindexen en pas je die op beide toe.

Belangrijkste punten

  • Maak één Generator met een startwaarde en gebruik de veranderende toestand opnieuw.
  • Reproduceerbaarheid hangt af van de startwaarde, aanroepen en numerieke omgeving.
  • Trekkingen van gehele getallen sluiten de bovengrens uit, tenzij je endpoint=True gebruikt.
  • scale bij een normale verdeling is de standaardafwijking, niet de variantie.
  • choice trekt standaard steekproeven met teruglegging.
  • shuffle wijzigt de array; permutation geeft een geschud resultaat terug.

6.2 Voer gevectoriseerde simulaties uit

Een gevectoriseerde simulatie geeft herhaalde proeven weer als arrays, past de regel voor de gebeurtenis op die arrays toe en vat de resultaten samen. De vorm van de array moet laten zien wat één proef bevat.

Zet een gebeurtenis om in een aandeel
rng = np.random.default_rng(42)
rolls = rng.integers(1, 7, size=100_000)
estimate = (rolls == 6).mean()

Het masker is één keer waar voor elke waargenomen 6. Het gemiddelde ervan schat de kans op die gebeurtenis, dicht bij 1/6, of ongeveer 0,1667. rolls.mean() beantwoordt een andere vraag: de gemiddelde waarde op de dobbelsteen, dicht bij 3,5. Een vaste startwaarde herhaalt een schatting; die maakt de schatting niet exact.

Vectorisatie voorkomt werk op Python-niveau voor elke trekking, waardoor grote simulaties vaak veel sneller zijn dan een lus. De snelheidswinst hangt af van de berekening, de grootte van de array en de computer en is dus geen vaste eigenschap van de gebeurtenis.

Gebruik één rij per proef met meerdere waarden

Om in elke proef twee dobbelstenen te simuleren:

dice = rng.integers(1, 7, size=(100_000, 2))
totals = dice.sum(axis=1)
p_seven = (totals == 7).mean()

De tabel heeft 100.000 proefrijen en twee dobbelsteenkolommen. Reductie van as 1 levert één totaal per proef op. Zes van de 36 even waarschijnlijke geordende paren hebben samen 7, dus de geschatte kans zou dicht bij 6/36 moeten liggen. Reductie van as 0 zou daarentegen twee totalen over alle proeven geven en de gebeurtenis per proef verloren laten gaan.

Grotere simulaties variëren nog steeds

Voor onafhankelijke proeven is de standaardfout van een geschat aandeel:

p(1−p)n

Hier is p de kans op de gebeurtenis en n het aantal proeven. Voor een 6 met een dobbelsteen bij 100.000 proeven is die ongeveer 0,0012. Volgens een normale benadering ligt ongeveer 95% van de schattingen binnen 0,0023 van 1/6. Als het aantal proeven met een factor 100 toeneemt, neemt de standaardfout af met een factor 10. Meer trekkingen corrigeren een onjuist gecodeerde gebeurtenis niet.

Maak en inspecteer een toevalswandeling

steps = rng.choice([-1, 1], size=1000) trekt stappen naar links of rechts. walk = steps.cumsum() geeft de positie na elke stap. Het maximum en minimum geven de uiterste bezochte posities aan. Om het eerste punt op minstens 10 eenheden van het begin te vinden:

hit = np.abs(walk) >= 10
if hit.any():
    step_count = hit.argmax() + 1

argmax vindt het eerste item dat waar is, maar geeft ook 0 terug als elk item onwaar is. De controle met any() maakt onderscheid tussen een werkelijk bereikt punt en geen bereikt punt. Tel 1 op omdat arraypositie 0 de positie na stap 1 is.

Voor veel wandelingen telt rng.choice([-1, 1], size=(5000, 1000)).cumsum(axis=1) afzonderlijk op langs elke rij. walks[:, -1] selecteert alle eindposities; hun gemiddelde ligt dicht bij 0 en hun standaardafwijking dicht bij de vierkantswortel van 1.000, ongeveer 31,6.

Gebruik permutaties en exacte controles

Een willekeurige splitsing van 100 records kan idx = rng.permutation(100) gebruiken, gevolgd door data[idx[:80]] en data[idx[80:]]. De twee niet-overlappende deelbereiken van één permutatie wijzen elk record precies één keer toe. Vergelijk bij een simulatie een eenvoudig geval met een exact antwoord, zoals een dobbelsteengemiddelde van 3,5, voordat je op ingewikkeldere uitvoer vertrouwt.

Belangrijkste punten

  • Geef één proef duidelijk weer in de vorm van de array.
  • Een gemiddelde van booleaanse waarden schat de kans op een gebeurtenis.
  • Reduceer binnen proeven voordat je resultaten over proeven combineert.
  • De standaardfout neemt af volgens de vierkantswortel van het aantal proeven.
  • Controleer of een punt is bereikt voordat je argmax gebruikt om het eerste bereikte punt te vinden.
  • Eén permutatie kan niet-overlappende willekeurige splitsingen van records opleveren.
  • Controleer de werking van een simulatie aan de hand van een eenvoudig exact geval.

NumPy-arrays: voorbeelden

6 Walkthroughs

1

Maak een meetarray waarop je kunt vertrouwen

14 stappen
Maak en inspecteer een array, kies de beginwaarden en behoud decimalen en ontbrekende gegevens correct.
  1. 1
    IntroductiePlan de records en metingen

    Een meettabel vereist vóór elke berekening twee keuzes: wat elke as voorstelt en welk soort waarden moet worden opgeslagen. We maken een kleine tabel, inspecteren de vorm en kiezen aanmaak- en conversiemethoden die de gegevens behouden.

    Zet import numpy as np bovenaan het script. De naam np geeft toegang tot de NumPy-functies die in de voorbeelden worden gebruikt.

  2. 2
    UitlegLees een tabel aan de hand van de assen

    Maak a = np.array([[2, 4, 6], [3, 5, 7]]). De buitenste reeks levert twee rijen; elke binnenste reeks levert drie waarden.

    a.shape is (2, 3), a.ndim is 2 en a.size is 6. De vorm beschrijft de rangschikking, ndim telt assen en size telt alle items. Als elke rij één record is, bevat deze tabel twee records met elk drie metingen.

  3. 3
    KernpuntGelijke aantallen elementen kunnen verschillende structuren hebben

    Een vector met lengte zes heeft vorm (6,). Een tabel met één rij heeft vorm (1, 6) en een tabel met één kolom heeft vorm (6, 1). Elk bevat zes waarden, maar alleen de laatste twee hebben afzonderlijke rij- en kolomassen.

    De komma aan het eind van (6,) duidt een tuple met één item aan. Dit is nuttige informatie: de vector heeft één as en dus geen afzonderlijke rijrichting die kan worden getransponeerd tot een kolom.

  4. 4
    UitdagingVoorspel de vermenigvuldiging voordat je die uitvoert

    Wat zijn de resultaten van [2, 5] * 2 en np.array([2, 5]) * 2?

    ---reveal---

    De lijst wordt [2, 5, 2, 5]. De array wordt [4 10]. Bij vermenigvuldiging met een geheel getal herhalen lijsten hun inhoud; numerieke arrays vermenigvuldigen de waarden op elke positie. De array behoudt de vorm, waardoor die geschikt is om een berekening op elke vastgelegde waarde toe te passen.

  5. 5
    VoorbeeldReserveer een tabel met een bekende vorm

    Stel dat twee stations elk vier neerslagmetingen in millimeters leveren. Maak rain = np.zeros((2, 4)) en ken vervolgens rain[0] = [4.0, 0.0, 3.5, 6.0] toe.

    De tuple (2, 4) is één vormargument. Zeros gebruikt standaard drijvendekommaopslag, zodat de meting 3,5 behouden blijft. Door de uiteindelijke vorm één keer te reserveren voorkom je dat een groeiende array telkens wordt gekopieerd wanneer metingen binnenkomen.

  6. 6
    TipKies de beginvulling bewust

    Gebruik zeros als nullen als beginwaarde betekenisvol zijn, ones voor enen en full(shape, value) voor een andere herhaalde waarde. Hun namen beschrijven de begininhoud.

    empty reserveert alleen opslag. De beginwaarden zijn niet klaar voor gebruik, dus elk item moet worden gevuld voordat het wordt gelezen. Een met nullen gevulde tabel is makkelijker te inspecteren wanneer je code schrijft die slechts enkele items een waarde geeft.

  7. 7
    UitlegTel punten en tussenruimtes afzonderlijk

    Voor meetposities van 0 m tot en met 2 m met tussenruimtes van 0,5 m zijn er vijf punten en vier tussenruimtes. np.linspace(0, 2, 5) maakt die punten en neemt beide uiteinden mee.

    np.arange(0, 2, 0.5) gebruikt een stap en sluit de stopwaarde uit, dus laat 2 m weg. Afronding van drijvendekommagetallen kan decimale arange-rasters ook verrassend maken; gebruik linspace als het aantal punten de eis is.

  8. 8
    UitdagingKies een raster op basis van de eindpunten

    Een scan vereist negen gelijkmatig verdeelde posities van 0 cm tot 4 cm, inclusief beide uiteinden. Welke aanmaakaanroep past hierbij en wat is de tussenafstand?

    ---reveal---

    Gebruik np.linspace(0, 4, 9). Negen punten maken acht tussenruimtes over 4 cm, dus de tussenafstand is 0,5 cm. Een derde argument van 8 zou om acht punten vragen, waardoor slechts zeven tussenruimtes overblijven en een andere afstand tussen metingen ontstaat.

  9. 9
    UitlegInspecteer het afgeleide datatype

    np.array([1, 2.5]) wordt een array met drijvendekommagetallen omdat één gedeeld datatype beide waarden moet kunnen bevatten. Als je een getal met tekst mengt, kunnen daarentegen alle waarden in tekst veranderen, waardoor berekeningen mislukken.

    Inspecteer a.dtype als de waarden zich niet gedragen zoals verwacht. a.itemsize geeft het aantal opslagbytes per element; als je dat vermenigvuldigt met a.size, krijg je a.nbytes, het totale aantal bytes dat de elementen innemen.

  10. 10
    VoorbeeldZie hoe een toekenning decimalen laat vervallen

    Begin met counts = np.array([2, 4, 6]) en voer daarna counts[0] = 3.8 uit. Het eerste item wordt 3 omdat de bestaande opslag voor gehele getallen blijft.

    Om latere decimalen te behouden, maak je eerst drijvendekommaopslag met values = counts.astype(float). astype maakt een geconverteerde kopie. De functie verandert het datatype van de oorspronkelijke array niet en herstelt geen informatie achter de komma die een eerdere toekenning al heeft weggegooid.

  11. 11
    KernpuntConversie en afronding zijn afzonderlijke stappen

    np.array([2.8, -2.8]).astype(int) geeft [2 -2]: afkappen gaat richting nul. np.round rondt af naar de dichtstbijzijnde waarde, waarbij exacte halven naar even gaan, dus 2,5 wordt afgerond naar 2,0.

    Kleine geheelgetaltypes brengen een ander risico mee. Een uint8 kan 260 niet bevatten, dus bij arrayberekeningen zoals 250 plus 10 kan de waarde teruglopen naar 4. Zet het datatype om naar een ruimer type voordat je waarden berekent die buiten het bereik kunnen komen.

  12. 12
    UitdagingBehoud een ontbrekende meting

    Je hebt a = np.array([5, 7, 9]) en moet de middelste meting als ontbrekend markeren. Welke voorbereiding heeft de array nodig voordat je NaN toekent?

    ---reveal---

    Converteer naar drijvendekommaopslag: a = a.astype(float) en stel daarna a[1] = np.nan in. Opslag voor gehele getallen kan NaN niet weergeven. Het resultaat is [5. nan 9.]; als je nul zou gebruiken, leg je een numerieke waarde vast in plaats van een ontbrekende meting te markeren.

  13. 13
    UitdagingCombineer aanmaken met een latere wijziging

    Je maakt template = np.array([1, 2]) en hebt vervolgens een array met dezelfde vorm nodig waarvan de waarden later 1,5 en NaN kunnen bevatten. Welke keuze bij het aanmaken houdt die waarden mogelijk?

    ---reveal---

    Gebruik een drijvendekommatype, bijvoorbeeld np.zeros_like(template, dtype=float). De like-functie zou standaard de opslag voor gehele getallen overnemen. De vorm kan (2,) blijven, terwijl float zowel de meting met decimalen als de markering voor ontbrekende waarden mogelijk maakt.

  14. 14
    SamenvattingInspecteer de structuur voordat je rekent

    Inspecteer bij de volgende array die je maakt shape, size en dtype voordat je berekeningen uitvoert. Controleer of elke as de bedoelde groep waarden voorstelt en of de opslag de metingen kan bevatten die je gaat toekennen.

    Kies bewust een aantal punten of een stap wanneer je een raster maakt. Als decimale waarden of NaN zullen voorkomen, plan dan drijvendekommaopslag voordat je die waarden in de array schrijft.

2

Selecteer records en bepaal wat wijzigingen veranderen

16 stappen
Gebruik indexen, kopieën en booleaanse maskers om de bedoelde numerieke gegevens te selecteren en te wijzigen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieVraag welke waarden in het resultaat horen
  2. 2
    UitlegVolg start, stop en stap
  3. 3
    VoorbeeldSelecteer rijen en kolommen in één expressie
  4. 4
    UitdagingBehoud een kolomas
  5. 5
    VoorbeeldVolg een schrijfbewerking via een weergave
  6. 6
    TipMaak onafhankelijkheid expliciet
  7. 7
    UitlegKoppel coördinaten of kies een blok
  8. 8
    UitdagingOnderscheid een kopie van een directe toekenning
  9. 9
    UitlegZet een voorwaarde om in een selectie
  10. 10
    VoorbeeldCombineer intervalgrenzen
  11. 11
    KernpuntTel gebeurtenissen of bereken het gemiddelde van hun waarden
  12. 12
    VoorbeeldKies voor vervangen of filteren
  13. 13
    UitdagingBehoud volledige rijen
  14. 14
    TipZoek NaN zonder gelijkheid
  15. 15
    UitdagingWijzig geselecteerde records onafhankelijk
  16. 16
    SamenvattingControleer het doel van elke wijziging
3

Geef waarden de juiste vorm en groepering

12 stappen
Wijzig de vorm van een reeks, verwissel de assen en voeg vervolgens bijbehorende arrays samen en splits ze op met behoud van hun structuur.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieMaak groepering zichtbaar in de vorm
  2. 2
    VoorbeeldGroepeer opeenvolgende waarden in perioden
  3. 3
    UitlegLeid één ontbrekende dimensie af
  4. 4
    VoorbeeldVerwissel de betekenis van rijen en kolommen
  5. 5
    UitdagingMaak een kolom van een vector
  6. 6
    TipKies een manier van afvlakken met het oog op wijzigen
  7. 7
    UitlegBreid een bestaande as uit
  8. 8
    VoorbeeldVoeg in plaats daarvan een batchas toe
  9. 9
    UitdagingMaak twee meetkolommen
  10. 10
    VoorbeeldSplits op grenzen of op aantal delen
  11. 11
    UitdagingBouw een tabel opnieuw op uit rijbatches
  12. 12
    SamenvattingLees vormen als keuzes over gegevens
4

Reken over records zonder Python-lus

15 stappen
Gebruik elementsgewijze expressies, functies die met arrays werken en broadcasting om gepaarde en gegroepeerde resultaten te berekenen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieLaat de expressie de berekening beschrijven
  2. 2
    VoorbeeldVermenigvuldig gepaarde waarden en tel ze op
  3. 3
    UitlegGebruik de juiste productoperator
  4. 4
    TipControleer de bestemming en de noemer
  5. 5
    UitdagingKies de referentie voor procentuele verandering
  6. 6
    UitlegPas wiskundige functies toe op arrays
  7. 7
    VoorbeeldBereken afstanden in stappen
  8. 8
    UitdagingVergelijk maximum met een reductie
  9. 9
    TipInspecteer afronding en ongeldige waarden
  10. 10
    UitlegLijn vormen vanaf rechts uit
  11. 11
    VoorbeeldBehoud rijgemiddelden als kolom
  12. 12
    KernpuntEen geldige broadcastingbewerking kan de verkeerde vraag beantwoorden
  13. 13
    UitdagingVoorspel een resultaat van broadcasting
  14. 14
    UitdagingWeeg gecentreerde metingen
  15. 15
    SamenvattingControleer waarden, koppeling en uitvoervorm
5

Vat de waarnemingen samen die je vraag beantwoorden

15 stappen
Kies reductieassen, sorteer volledige records en verwerk ontbrekende waarden en gefilterde deelverzamelingen expliciet.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieKies eerst de vraag en dan de statistische maat
  2. 2
    VoorbeeldReduceer de meetas
  3. 3
    KernpuntVolg wat de reductie overhoudt
  4. 4
    VoorbeeldOnderscheid positie, waarde en cumulatief totaal
  5. 5
    UitdagingKies de deler voor de variantie
  6. 6
    VoorbeeldBepaal een mediaan en een percentiel
  7. 7
    TipSorteer records via posities
  8. 8
    UitdagingHaal een label terug uit het aantal
  9. 9
    UitlegSla ontbrekende waarden bewust over
  10. 10
    VoorbeeldZet een code voor ontbrekende waarden om vóór het middelen
  11. 11
    KernpuntAanvullen maakt waarnemingen voor de berekening
  12. 12
    VoorbeeldMaak één beslissing over volledigheid per rij
  13. 13
    UitdagingHerken een lege deelverzameling
  14. 14
    UitdagingVat groepen samen en vergelijk ze
  15. 15
    SamenvattingRapporteer wat aan elke samenvatting heeft bijgedragen
6

Voer een reproduceerbare simulatie uit, van trekkingen tot resultaten

14 stappen
Maak een Generator, organiseer proeven, schat de kans op een gebeurtenis en inspecteer paden van toevalswandelingen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieGeef elke gesimuleerde proef een duidelijke vorm
  2. 2
    UitlegMaak de Generator één keer
  3. 3
    VoorbeeldStel parameters in voor gehele en normaal verdeelde trekkingen
  4. 4
    UitdagingZoek de fout met herhaalde toevalswaarden
  5. 5
    TipKies teruglegging en behoud records
  6. 6
    VoorbeeldSchat een gebeurtenis met een masker
  7. 7
    VoorbeeldReduceer binnen elke proef met twee dobbelstenen
  8. 8
    UitdagingVerander de gebeurtenis naar minstens één dobbelsteen
  9. 9
    UitlegVerwacht steekproefvariatie
  10. 10
    VoorbeeldTel stappen cumulatief op tot een pad
  11. 11
    TipControleer of de grens is bereikt
  12. 12
    UitdagingVerdeel records precies één keer
  13. 13
    UitdagingBepaal wat een veel grotere uitvoering kan herstellen
  14. 14
    SamenvattingControleer eerst het model en daarna de precisie

NumPy-arrays: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Lees arrays en kies de juiste bewerking10 Oefenvragen

Vraag 1 van 10

Een array bevat 8 records met 5 metingen per record, één record per rij. Wat is de vorm?
  1. (5, 8)
  2. (40,)
  3. (8, 5)
  4. (8, 5, 40)
Toon antwoordVerberg antwoord
Antwoord: C
De eerste dimensie telt de 8 rijen en de tweede telt de 5 meetkolommen, dus de vorm is (8, 5). (5, 8) draait de rollen van records en metingen om. Er zijn in totaal 40 elementen, maar dat aantal vervangt de vorm met twee assen niet.

Vraag 2 van 10

Je hebt zeven gelijkmatig verdeelde posities nodig van 0 m tot 3 m, inclusief beide uiteinden. Welke aanroep maakt die?
  1. np.arange(0, 3, 0.5)
  2. np.linspace(0, 3, 7)
  3. np.linspace(0, 3, 6)
  4. np.arange(0, 3, 7)
Toon antwoordVerberg antwoord
Antwoord: B
De gevraagde zeven punten maken zes tussenruimtes over 3 m, dus np.linspace(0, 3, 7) geeft een tussenafstand van 0,5 m en neemt beide uiteinden mee. np.arange(0, 3, 0.5) stopt vóór 3 en geeft slechts zes punten. Bij linspace telt het derde argument punten, geen tussenruimtes.

Vraag 3 van 10

Welke waarden levert np.array([4.9, -4.9]).astype(int) op?
  1. [4, -4]
  2. [5, -5]
  3. [4, -5]
  4. [5, -4]
Toon antwoordVerberg antwoord
Antwoord: A
Bij het converteren van drijvendekommawaarden naar gehele getallen met astype(int) wordt het deel achter de komma richting nul verwijderd, wat 4 en −4 geeft. Voor het resultaat [5, -5] zou je eerst naar de dichtstbijzijnde waarde moeten afronden. Geheeltallige deling met afronding naar beneden gebruikt voor negatieve waarden een andere richting en beschrijft deze conversie niet.

Vraag 4 van 10

Welk aandeel geeft (v >= 8).mean() terug voor v = np.array([2, 8, 11, 5, 14])?
  1. 3.0
  2. 0.4
  3. 11.0
  4. 0.6
Toon antwoordVerberg antwoord
Antwoord: D
Drie van de vijf waarden voldoen aan de voorwaarde: 8, 11 en 14. Het gemiddelde van de booleaanse waarden is daarom 3 gedeeld door 5, ofwel 0,6. De som van het masker zou het aantal 3 teruggeven, terwijl het gemiddelde van de geselecteerde metingen een andere vraag over hun waarden zou beantwoorden.

Vraag 5 van 10

Een tabel heeft rijen [batch_id, mass_kg]: d = np.array([[1, 4], [2, 9], [1, 7], [2, 5]]). Wat is de gemiddelde massa van de records van batch 1 waarvan de massa groter is dan 5 kg?
  1. 5.5
  2. 7.0
  3. 8.0
  4. 4.0
Toon antwoordVerberg antwoord
Antwoord: B
Beide voorwaarden moeten voor dezelfde rij gelden: de batchidentificatie is 1 en de massa is groter dan 5. Alleen de rij [1, 7] blijft over, dus de gemiddelde massa is 7,0 kg. Een gemiddelde van 5,5 kg bevat beide records van batch 1 en mist de voorwaarde voor de massa; 8,0 kg negeert de voorwaarde voor de batch.

Vraag 6 van 10

Wat is np.arange(8).reshape(2, 4).T[1]?
  1. [2, 3]
  2. [4, 5, 6, 7]
  3. [0, 4]
  4. [1, 5]
Toon antwoordVerberg antwoord
Antwoord: D
De vormwijziging maakt eerst de rijen [0, 1, 2, 3] en [4, 5, 6, 7]. Transponeren maakt van hun tweede kolom rij 1, [1, 5]. Als je [2, 3] krijgt, groepeer je de oorspronkelijke reeks opnieuw in rijen met lengte twee; dat is een vormwijziging en geen verwisseling van assen.

Vraag 7 van 10

Oude eenheidsprijzen zijn np.array([5., 8.]) en nieuwe prijzen zijn np.array([6., 6.]). Welke procentuele veranderingen geeft (new - old) / old * 100?
  1. [20., -25.]
  2. [16.67, -33.33]
  3. [1., -2.]
  4. [-20., 25.]
Toon antwoordVerberg antwoord
Antwoord: A
De veranderingen zijn 1 en −2, en delen door de oude prijzen geeft 0,2 en −0,25. Vermenigvuldigen met 100 drukt deze uit als een stijging van 20% en een daling van 25%. Delen door de nieuwe prijzen zou ongeveer 16,67% en −33,33% geven, met de verkeerde referentiebedragen.

Vraag 8 van 10

Een tabel heeft één rij per machine en één kolom per dag. Welke expressie geeft één totaal per machine?
  1. data.sum(axis=0)
  2. data.sum()
  3. data.sum(axis=1)
  4. data.cumsum(axis=1)
Toon antwoordVerberg antwoord
Antwoord: C
Elk machinetotaal combineert de dagkolommen binnen de rij, dus reduceer as 1. Reductie van as 0 zou machines combineren en één totaal per dag geven. cumsum(axis=1) behoudt een cumulatief totaal op elke dag in plaats van slechts één totaal per machine terug te geven.

Vraag 9 van 10

Een recordtabel is d = np.array([[9, 30], [2, 80], [5, 40]]). Hoe sorteer je records op hun eerste kolom, van klein naar groot, terwijl je elke rij bij elkaar houdt?
  1. np.sort(d, axis=0)
  2. d[d[:, 0].argsort()]
  3. d[d[:, 1].argsort()]
  4. np.sort(d, axis=1)
Toon antwoordVerberg antwoord
Antwoord: B
De eerste kolom levert de sorteersleutel en de bijbehorende argsort() geeft rijposities in de volgorde 1, 2, 0. Als je die posities op d toepast, verplaats je volledige records. Kolommen afzonderlijk sorteren met np.sort(d, axis=0) zou de waarden in de eerste kolom scheiden van de waarden in de tweede kolom die oorspronkelijk erbij waren vastgelegd.

Vraag 10 van 10

Een generator moet 20 dobbelsteenwaarden trekken, waarbij alle zes waarden mogelijk zijn. Welke aanroep heeft de juiste grenzen voor gehele getallen?
  1. rng.integers(1, 6, size=20)
  2. rng.integers(0, 6, size=20)
  3. rng.integers(1, 7, size=20)
  4. rng.integers(1, 7, size=6)
Toon antwoordVerberg antwoord
Antwoord: C
De ondergrens is inbegrepen en de bovengrens is uitgesloten, dus grenzen 1 en 7 maken waarden 1 tot en met 6 mogelijk bij 20 trekkingen. Een bovengrens van 6 laat de waarde 6 weg. Een steekproef van 20 trekkingen hoeft niet daadwerkelijk elke waarde te bevatten, ook als alle waarden mogelijk zijn.
Set 2: Verbind selecties, vormen en samenvattingen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat maakt np.arange(4, 16, 5)?
  1. [4, 9, 14, 16]
  2. [4, 8, 12]
  3. [0, 5, 10, 15]
  4. [4, 9, 14]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Welke waarden maakt np.full_like(template, 1.8) na template = np.array([2, 4, 6]) met het standaarddatatype?
  1. [1, 1, 1]
  2. [1.8, 1.8, 1.8]
  3. [2, 2, 2]
  4. [2, 4, 6]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat is a na a = np.arange(7); b = a[1:5]; c = a[[1, 4]]; b[1] = 90; c[0] = 80?
  1. [0, 80, 90, 3, 4, 5, 6]
  2. [0, 1, 2, 3, 4, 5, 6]
  3. [0, 1, 90, 3, 4, 5, 6]
  4. [0, 90, 2, 3, 80, 5, 6]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Welke waarden selecteert a[1:6:2] voor a = np.array([3, 6, 9, 12, 15, 18, 21])?
  1. [6, 12, 18, 21]
  2. [6, 12, 18]
  3. [3, 9, 15]
  4. [6, 9, 12, 15, 18]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Arrays a en b hebben vormen (3, 2) en (3, 5). Welke vorm heeft np.concatenate([a, b], axis=1)?
  1. (6, 5)
  2. (3, 2, 5)
  3. (3, 7)
  4. (2, 3, 5)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat geeft np.floor(x) - np.trunc(x) voor x = np.array([-3.5, 2.5])?
  1. [-1., 0.]
  2. [0., 0.]
  3. [1., 0.]
  4. [-1., -1.]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Behoud voor de verplaatsingsvectoren x = np.array([6., 8.]) en y = np.array([8., 15.]) in meters alleen punten op maximaal 12 m van de oorsprong. Welke afstanden blijven over?
  1. [10., 17.]
  2. [14.]
  3. [10., 12.]
  4. [10.]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Wat is voor x = np.array([10., np.nan, 16., np.nan, 22.]) het gemiddelde nadat elke NaN door nul is vervangen?
  1. 16.0
  2. 9.6
  3. 12.0
  4. 19.2
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat gebeurt er wanneer rng.choice(np.arange(5), size=6, replace=False) wordt aangeroepen?
  1. De functie geeft zes trekkingen terug en staat één herhaalde positie toe.
  2. De functie geeft vijf trekkingen terug na verkleining van de gevraagde omvang.
  3. De functie geeft zes verschillende gehele labels van 0 tot en met 5 terug.
  4. De functie geeft een fout omdat er geen zes verschillende posities beschikbaar zijn.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

dice bevat 60.000 proeven met drie eerlijke dobbelstenen en heeft vorm (60000, 3). Welke expressie schat de kans dat een proef minstens één 6 bevat?
  1. (dice == 6).any(axis=1).mean()
  2. (dice == 6).all(axis=1).mean()
  3. (dice == 6).mean(axis=1).mean()
  4. (dice == 6).any(axis=0).mean()
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Volg gegevens door meerdere arraybewerkingen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat is het resultaat van a = np.array([8, 12]); a[0] = 3.7; b = a / 2?
  1. a is [3.7, 12.]; b is [1.85, 6.].
  2. a is [3, 12]; b is [1.5, 6.].
  3. a is [4, 12]; b is [2., 6.].
  4. a is [3, 12]; b is [1, 6].
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat zijn voor m = np.arange(20).reshape(4, 5) de vorm en waarden van m[1:3, 2:3]?
  1. (2,), met waarden [7, 12]
  2. (2, 2), met rijen [7, 8] en [12, 13]
  3. (1, 2), met rij [7, 12]
  4. (2, 1), met rijen [7] en [12]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Welke vorm heeft t[1, :, 2:4] voor een array t met vorm (3, 4, 5)?
  1. (4, 2)
  2. (1, 4, 2)
  3. (4,)
  4. (2, 4)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Uurlijkse metingen v = np.arange(1, 13) worden gegroepeerd in vier opeenvolgende perioden van drie uur. Wat is de eerste rij nadat de assen voor de periode en de positie binnen de periode zijn verwisseld?
  1. [1, 2, 3, 4]
  2. [1, 5, 9]
  3. [1, 4, 7, 10]
  4. [3, 6, 9, 12]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welke lengtes van de stukken levert np.array_split(np.arange(14), 4) op?
  1. 4, 4, 3, 3
  2. 3, 3, 4, 4
  3. 4, 4, 4, 2
  4. 3, 3, 3, 5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat geeft A * A terug voor A = np.array([[2, 3], [4, 5]])?
  1. [[16, 21], [28, 37]]
  2. [[4, 6], [8, 10]]
  3. [[2, 3], [4, 5], [2, 3], [4, 5]]
  4. [[4, 9], [16, 25]]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

De rijen van X zijn [2., 6.] en [8., 12.]. Van elke rij moet het eigen gemiddelde worden afgetrokken. Welk resultaat geeft de onjuiste expressie X - X.mean(axis=1) daadwerkelijk?
  1. [[-2., 2.], [-2., 2.]]
  2. [[-3., -3.], [3., 3.]]
  3. [[-2., -4.], [4., 2.]]
  4. [[-5., -1.], [1., 5.]]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Wat is x.var(ddof=1) voor x = np.array([1., 3., 5.])?
  1. 2.6667
  2. 4.0
  3. 2.0
  4. 8.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat is np.percentile([4, 8, 12, 20], 25) met de standaardinterpolatie van NumPy?
  1. 6.0
  2. 8.0
  3. 7.0
  4. 10.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Elke rij van steps bevat vijf stappen van ±1 voor één wandeling. Je hebt het aandeel wandelingen nodig dat op een vastgelegde stap minstens 3 eenheden van het begin bereikt. Welke expressie berekent dat aandeel?
  1. (np.abs(steps.cumsum(axis=1)) >= 3).any(axis=1).mean()
  2. (np.abs(steps.cumsum(axis=0)) >= 3).any(axis=1).mean()
  3. (np.abs(steps.sum(axis=1)) >= 3).mean()
  4. (np.abs(steps.cumsum(axis=1)) >= 3).all(axis=1).mean()
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Onderzoek resultaten die aannemelijk lijken10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een numerieke array a heeft vorm (6, 4) en itemsize == 8. Je voert b = a[::2, 1:] uit en daarna c = b[:, ::2].copy(). Hoeveel bytes elementopslag heeft c?
  1. 48
  2. 72
  3. 192
  4. 24
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat levert np.array([4, 7]) * 3 op?
  1. [4, 7, 4, 7, 4, 7]
  2. [7, 10]
  3. [12, 21]
  4. [4, 7, 3]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat is m[[0, 2], [1, 3]] voor m = np.arange(12).reshape(3, 4)?
  1. [[1, 3], [9, 11]]
  2. [1, 3]
  3. [[4, 5, 6, 7], [8, 9, 10, 11]]
  4. [1, 11]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

De rijen [group, reading] in d zijn [[1., 6.], [2., np.nan], [1., 10.], [2., 14.], [1., np.nan]]. Hoe krijg je het gemiddelde van de aanwezige metingen in groep 1?
  1. np.mean(d[d[:, 0] == 1, 1])
  2. np.nanmean(d[d[:, 0] == 1, 1])
  3. np.nanmean(d[d[:, 1] == 1, 0])
  4. np.nanmean(d[:, 1])
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Hoe verhouden v.T.shape en v[:, np.newaxis].shape zich na v = np.arange(5)?
  1. (1, 5) en (5, 1)
  2. (5,) en (5, 1)
  3. (5, 1) en (1, 5)
  4. (5,) en (1, 5)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat levert np.maximum(x, 3) op voor x = np.array([-4., 2., 7.])?
  1. [3., 3., 3.]
  2. [-4., 2., 3.]
  3. [7., 7., 7.]
  4. [3., 3., 7.]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een tabel met vorm (3, 2) bevat gepaarde waarden voor drie records. Een vector offset met lengte drie geeft één correctie per record. Je moet elke correctie optellen bij beide waarden in het eigen record. Welke expressie en resultaatvorm passen?
  1. X + offset[:, None], vorm (3, 2)
  2. X + offset, vorm (3, 2)
  3. X[:, :, None] + offset, vorm (3, 2, 3)
  4. X.T + offset[:, None], vorm (2, 3)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

values, counts = np.unique([4, 9, 4, 2, 9, 9], return_counts=True). Wat geeft values[counts.argmax()] terug?
  1. 3
  2. 2
  3. 9
  4. 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat geeft np.nanmean(D, axis=0) terug voor D = np.array([[2., 4.], [np.nan, 6.], [8., np.nan]])?
  1. [3.3333, 3.3333]
  2. [3., 6., 8.]
  3. [np.nan, np.nan]
  4. [5., 5.]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

ids = np.arange(6) en een afzonderlijke meetarray hebben dezelfde recordvolgorde. Je hebt vier trainingsrecords en twee testrecords nodig, met bijpassende identificatiecodes en metingen en zonder overlap. Welke aanpak garandeert dit?
  1. Maak één indexpermutatie, verdeel die in 4 en 2 en pas beide deelbereiken op beide arrays toe.
  2. Schud de arrays met identificatiecodes en metingen onafhankelijk en neem hun eerste 4 en laatste 2 items.
  3. Trek 4 trainingsindexen en 2 testindexen in afzonderlijke aanroepen, beide zonder teruglegging.
  4. Maak één permutatie voor identificatiecodes en een andere voor metingen en verdeel elk in 4 en 2.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Combineer arrayhulpmiddelen in volledige analyses10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een ruwe vector met gehele getallen is np.array([5, -999, 9]), waarbij −999 ontbrekend betekent. Je hebt het waargenomen gemiddelde nodig nadat je bij elke aanwezige meting een correctie van 0,5 hebt opgeteld. Wat is het juiste resultaat?
  1. 7.0
  2. 5.0
  3. -327.8333
  4. 7.5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

a = np.array([2, 5, 8, 11]); b = a[1:]; c = b[[0, 2]]; b[0] = 20; c[1] = 30; a[[0, 3]] = c. Wat is a daarna?
  1. [20, 20, 8, 30]
  2. [5, 20, 8, 30]
  3. [5, 5, 8, 30]
  4. [5, 20, 8, 11]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Voor x = np.array([1., np.nan, 4., 7.]) wil je het aandeel waargenomen waarden dat groter is dan 3. Wat is dat aandeel?
  1. 2/3
  2. 1/2
  3. 3/4
  4. 1/3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Twee arrays hebben vorm (2, 3). Welke vorm ontstaat door np.stack([a, b], axis=1)?
  1. (4, 3)
  2. (2, 6)
  3. (2, 2, 3)
  4. (2, 3, 2)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Na a = np.array([3, 6]) heb je de waarden [3.5, 6.5] nodig. Waarom werkt a = a + 0.5, terwijl a += 0.5 een fout geeft?
  1. De eerste rondt af naar gehele getallen; de wijziging in het bestaande geheugen vereist gehele operanden.
  2. De eerste past broadcasting toe op een scalaire waarde; de wijziging in het bestaande geheugen vereist een array met dezelfde vorm.
  3. De eerste maakt floatopslag; de wijziging in het bestaande geheugen behoudt opslag voor gehele getallen.
  4. De eerste negeert datatypevoorschriften; de wijziging in het bestaande geheugen vereist overeenkomende datatypes.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

X = np.array([[2., 6., 10.], [4., 8., 12.]]) wordt afzonderlijk binnen elke rij gecentreerd. Welk resultaat moet de juiste expressie opleveren?
  1. [[-4., 0., 4.], [-4., 0., 4.]]
  2. [[-1., -1., -1.], [1., 1., 1.]]
  3. [[-6., -2., 2.], [-2., 2., 6.]]
  4. [[-4., -1., 2.], [-2., 1., 4.]]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Elke rij van X = np.array([[3., 9.], [5., 7.], [8., 4.]]) bevat twee metingen. Centreer elke rij, weeg daarna de eerste kolom met 0,25 en de tweede met 0,75 en tel binnen elke rij op. Wat zijn de resultaten?
  1. [0., 0., 0.]
  2. [7.5, 6.5, 5.]
  3. [-1.5, -0.5, 1.]
  4. [1.5, 0.5, -1.]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Wat is x.argmax() voor x = np.array([7, 12, 12, 4])?
  1. 12
  2. 1
  3. 2
  4. 3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

De rijen [group, reading] in D zijn [[1., 4.], [1., np.nan], [2., 8.], [2., 10.], [2., np.nan]]. Vul elke ontbrekende meting aan met het waargenomen gemiddelde van de eigen groep. Wat is het gemiddelde van alle vijf aangevulde metingen?
  1. 7.3333
  2. 7.0
  3. 6.5
  4. 4.4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een simulatie gebruikt onafhankelijke proeven om een aandeel te schatten. Als 2.500 proeven een standaardfout van ongeveer 0,01 geven, hoeveel proeven zijn dan nodig voor ongeveer 0,0025 bij dezelfde kans op de gebeurtenis?
  1. 10.000
  2. 20.000
  3. 160.000
  4. 40.000
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

82 Kernbegrippen, elk met een definitie

A

aantal elementen
Het aantal elementen van een array is het totale aantal elementen. Voor een array met één of meer assen is dit gelijk aan het product van de lengtes in de vorm.
Een array met vorm (4, 7) heeft 28 elementen, hoewel het attribuut ndim slechts twee assen aangeeft.
afkappen
Afkappen verwijdert het deel achter de komma van een getal richting nul, zodat een positieve waarde afneemt en een negatieve waarde toeneemt richting nul.
Conversie van −7,9 met astype(int) geeft −7; toepassing van floor zou −8 geven.
afvlakken
Afvlakken rangschikt arraywaarden in één dimensie; flatten kopieert de gegevens, terwijl ravel de oorspronkelijke gegevens kan delen.
Roep table.flatten() aan als je een afzonderlijk 1-dimensionaal resultaat nodig hebt waarvan wijzigingen de tabel niet kunnen veranderen.
aggregatie
Een aggregatie, of reductie, combineert arraywaarden tot minder resultaten, zoals een totaal, gemiddelde, minimum of maximum voor een gekozen groep.
table.mean(axis=0) aanroepen combineert records tot één gemiddelde voor elke meetkolom.
aggregatie met overslaan van NaN-waarden
Een aggregatie met overslaan van NaN-waarden slaat NaN-items bewust over bij het berekenen van een statistische maat, met functies zoals nanmean of nanmedian.
np.nanmean([5., np.nan, 9.]) geeft 7,0 terug door het gemiddelde van de twee waargenomen waarden te berekenen.
aliasing
Aliasing treedt op wanneer verschillende namen naar hetzelfde object verwijzen; een array aan een andere naam toekennen kopieert de gegevens niet en maakt geen weergaveobject.
Na b = a is de expressie b is a waar en verandert een toekenning via een van beide namen die ene array.
as
Een as is één dimensie van een array, met een eigen lengte en indexposities; een 2-dimensionale tabel heeft een rijas en een kolomas.
In een meettabel behoudt de selectie data[:, 0] alle posities op de rijas en selecteert de eerste kolom.
as met lengte één
Een as met lengte één kan een vector de rol van rij of kolom geven zonder het aantal waarden in de array te veranderen.
Als je [:, None] toevoegt aan een vector met lengte vier, ontstaat vorm (4, 1), geschikt voor één waarde per tabelrij.

B

begrenzen
Begrenzen houdt waarden binnen een opgegeven interval door waarden onder de ondergrens of boven de bovengrens door die grenzen te vervangen.
np.clip(readings, 10, 30) behoudt waarden binnen het bereik en vervangt metingen daarbuiten door 10 of 30.
bewerking in het bestaande geheugen
Een bewerking in het bestaande geheugen wijzigt de opslag van een bestaande array en behoudt het datatype, zodat sommige resultaattypes niet door die bewerking kunnen worden teruggeschreven.
0,5 optellen met += bij een array met gehele getallen mislukt, terwijl een gewone optelling drijvendekommaopslag kan maken.
binaire ufunc
Een binaire ufunc neemt twee invoerwaarden en combineert ze elementsgewijs, bijvoorbeeld door het maximum van elk paar te kiezen of waarden te vermenigvuldigen.
np.maximum(observed, minimum) kiest op elke uitvoerpositie de grootste van twee uitgelijnde waarden.
booleaans masker
Een booleaans masker is een waar-of-onwaararray die posities markeert die aan een voorwaarde voldoen en wordt gebruikt om geselecteerde waarden te filteren, tellen of toe te kennen.
Voor een temperatuurvector markeert t > 25 de dagen waarop de vastgelegde temperatuur hoger is dan 25 °C.
booleaanse indexering
Booleaanse indexering selecteert items of records waar een passend masker waar is en levert gekopieerde waarden uit de geselecteerde posities op.
data[data[:, 0] > 10] behoudt hele rijen op basis van de voorwaarde die op hun eerste kolom wordt toegepast.
broadcasting
Broadcasting lijnt compatibele arrayvormen uit zodat assen met lengte één tijdens elementsgewijze bewerkingen denkbeeldig worden uitgebreid zonder herhaalde invoer te kopiëren.
Een vector met vorm (3,) optellen bij een tabel met vorm (8, 3) past die vector toe op elk van de acht rijen.

C

centreren
Centreren trekt het relevante gemiddelde van waarden af, zodat afwijkingen worden gemeten ten opzichte van het geselecteerde rij-, kolom- of groepsgemiddelde.
X - X.mean(axis=0) trekt het gemiddelde van elke kolom af van de waarden in diezelfde kolom.
code voor ontbrekende waarden
Een code voor ontbrekende waarden is een afgesproken plaatsvervangende waarde die afwezige waarnemingen markeert en moet worden herkend voordat die als numerieke gegevens wordt behandeld.
Vervang een gedefinieerde code zoals −999 door NaN in een floatarray voordat je het gemiddelde van metingen berekent.
compatibele dimensies
Compatibele dimensies hebben gelijke lengtes of bevatten een lengte van één wanneer vormen voor broadcasting vanaf hun meest rechtse assen worden uitgelijnd.
Vormen (5, 1) en (4,) combineren tot (5, 4) omdat hun uitgelijnde assen aan de compatibiliteitsregel voldoen.
concatenatie
Concatenatie voegt arrays samen langs een bestaande as, waarbij alle andere aslengtes moeten overeenkomen en de lengtes op de samenvoegas worden opgeteld.
Vormen (2, 4) en (5, 4) langs as 0 samenvoegen maakt een tabel met zeven rijen en vier kolommen.
cumulatieve som
Een cumulatieve som legt het cumulatieve totaal tot en met elke positie vast en behoudt tussentotalen in plaats van alleen een eindsom terug te geven.
np.cumsum([2, 5, 1]) geeft [2, 7, 8], nuttig om een saldo te volgen terwijl items worden opgeteld.

D

datatype
Een datatype beschrijft de soort en opslagweergave van elk element in een array, waaronder breedtes zoals 32-bits of 64-bits getallen.
Als je data.dtype inspecteert, kan blijken dat een verdwaald tekstlabel ervoor zorgde dat numeriek ogende waarden als tekenreeksen zijn opgeslagen.
deelbereik
Een deelbereik selecteert een regelmatige reeks posities met een begin, een uitgesloten stoppositie en een optionele stap, terwijl de geselecteerde as behouden blijft.
Het deelbereik a[2:7:2] selecteert posities 2, 4 en 6 en slaat één positie tussen geselecteerde waarden over.
domein van een functie
Het domein van een functie is de verzameling invoerwaarden waarvoor de wiskundige regel is gedefinieerd binnen het gebruikte getallenstelsel.
Een reële wortel vereist niet-negatieve invoer; np.sqrt(-4.0) geeft normaal gesproken een waarschuwing en NaN terug.
drijvendekommagetal
Een drijvendekommagetal slaat een binaire benadering van een numerieke waarde met eindige precisie op, zodat veel decimale breuken niet exact worden weergegeven.
Vergelijk berekende decimale arrays met np.allclose als kleine weergaveverschillen zijn toegestaan.

E

eenheidsmatrix
Een eenheidsmatrix is een vierkante 2-dimensionale array met enen op de hoofddiagonaal en elders nullen, gemaakt met een functie zoals np.eye.
np.eye(4) maakt vier enen op de diagonaal van een 4×4-array, met nullen op de overige posities.
eerste bereiktijd
Een eerste bereiktijd is het aantal stappen totdat een pad voor het eerst aan een opgegeven voorwaarde voldoet. Daarbij moet je controleren of het punt überhaupt is bereikt.
Als het masker voor een wandeling voor het eerst waar wordt op index 6, is de grens na zeven stappen bereikt.
elementsgewijs rekenen
Elementsgewijs rekenen past een operator toe op overeenkomstige posities van compatibele arrays en levert voor elk uitgelijnd paar een resultaat op.
Twee arrays met vorm (2, 3) vermenigvuldigen met * geeft zes gepaarde producten in een andere array met vorm (2, 3).
elementsgewijze logische bewerking
Een elementsgewijze logische bewerking combineert overeenkomstige maskeritems met &, | of ~ voor en, of respectievelijk ontkenning.
Het masker (x >= 2) & (x <= 8) behoudt waarden die aan beide grenzen voldoen, met elke vergelijking tussen haakjes.

F

functie voor het aanmaken van arrays
Een functie voor het aanmaken van arrays maakt een array uit opgegeven waarden of uit een regel die de vorm, vulling, het bereik of het aantal punten bepaalt.
np.full((3, 2), 8) maakt drie rijen van twee waarden zonder dat je zes afzonderlijke invoerwaarden hoeft te schrijven.

G

gedeeld geheugengebruik
Gedeeld geheugengebruik betekent dat arrays naar overlappende opgeslagen gegevens verwijzen; np.shares_memory toetst of twee specifieke arrays overlappen.
Een gekopieerde selectie met indexarrays deelt geen geheugen met de bron, terwijl een gewoon niet-leeg deelbereik dat wel doet.
gelijkmatige puntafstand
Gelijkmatige puntafstand betekent dat aangrenzende punten binnen een interval gelijke tussenruimtes hebben; linspace maakt dit raster op basis van de eindpunten en het aantal punten.
Vijf gelijkmatig verdeelde punten van 0 m tot 8 m vormen vier tussenruimtes van elk 2 m.
gemiddelde-imputatie
Gemiddelde-imputatie vervangt ontbrekende items door het waargenomen gemiddelde. Dat gemiddelde blijft behouden, terwijl de aangevulde waarden minder verspreid lijken.
De NaN-items van een sensor aanvullen met het waargenomen gemiddelde verandert de spreiding, ook als het gerapporteerde gemiddelde gelijk blijft.
Generator
Een Generator is het object van NumPy voor aselecte steekproeftrekking, gemaakt met default_rng en hergebruikt via methoden die de interne toestand veranderen.
rng.integers twee keer aanroepen zet de reeks voort; rng opnieuw maken met dezelfde startwaarde begint de reeks opnieuw.
gepaarde coördinaten
Gepaarde coördinaten zijn rij-kolomposities die item voor item uit indexarrays worden gekoppeld, waarbij voor elk overeenkomstig paar één element wordt geselecteerd.
De expressie m[[0, 2], [1, 3]] selecteert coördinaten (0, 1) en (2, 3), geen 2×2-blok.
gewogen som
Een gewogen som telt waarden op nadat elke waarde met het toegewezen gewicht is vermenigvuldigd, zodat verschillende kolommen in verschillende mate kunnen bijdragen.
(scores * weights).sum(axis=1) maakt een gewogen resultaat voor elke rij wanneer de gewichten uitlijnen met de kolommen.

H

homogene opslag
Homogene opslag betekent dat elk arrayelement hetzelfde datatype volgt, waardoor numerieke waarden met consistente opslagregels kunnen worden verwerkt.
In np.array([2, 3.5]) wordt het gehele invoergetal een float, zodat beide elementen drijvendekommaopslag delen.

I

index
Een index is een positie waarmee je een arrayelement langs een as selecteert; posities beginnen bij nul en negatieve indexen tellen terug vanaf het einde.
Bij vijf metingen verwijzen index 4 en index −1 beide naar de laatste meting langs die as.
index van het maximum
De index van het maximum is de positie die een bewerking teruggeeft voor een maximum, waarbij het eerste voorkomen wordt genomen als waarden voor het maximum gelijk zijn.
Voor [3, 8, 8, 2] geeft argmax de waarde 1 terug, een positie en niet de maximumwaarde 8.
indexering met indexarrays
Indexering met indexarrays selecteert posities met lijsten of arrays van gehele getallen. Daarbij zijn willekeurige volgorde en herhaling mogelijk en worden gekopieerde gegevens teruggegeven.
De selectie a[[4, 1, 4]] neemt positie 4 twee keer mee en behoudt de gevraagde uitvoervolgorde.
indirect sorteren
Indirect sorteren geeft de indexposities terug die waarden in gesorteerde volgorde zouden plaatsen, zodat dezelfde volgorde op andere gegevens kan worden toegepast.
Gebruik names[np.argsort(scores)] om namen op score te ordenen zonder de koppeling tussen naam en score te verliezen.

K

kolomsgewijs stapelen
Kolomsgewijs stapelen plaatst bij elkaar passende 1-dimensionale arrays als kolommen in een 2-dimensionale tabel en houdt waarden met dezelfde oorspronkelijke index in dezelfde rij.
Combineer uitgelijnde lengte- en massavectoren met np.column_stack om per persoon één record met twee metingen te maken.
kopie
Een kopie is een array met onafhankelijke elementopslag, zodat de waarden kunnen veranderen zonder de waarden van de bronarray te wijzigen.
Met saved = data[:3].copy() bewaar je een onafhankelijke deelverzameling voor latere wijzigingen of vergelijkingen.
kwantiel
Een kwantiel beschrijft een positie in een verdeling met een fractie van 0 tot 1, overeenkomstig een percentiel gedeeld door 100.
np.quantile(x, 0.75) vraagt bij overeenkomstige opties dezelfde positie als np.percentile(x, 75).

M

mediaan
De mediaan is de middelste gesorteerde waarde, of het gemiddelde van de twee middelste waarden bij een even aantal, en is daardoor bestand tegen extreme waarnemingen.
De mediaan van [1, 3, 6, 100] is 4,5, hoewel de ongewoon grote laatste waarde het gemiddelde sterk verhoogt.

N

naar beneden afronden
Naar beneden afronden bepaalt het grootste gehele getal dat niet groter is dan een gegeven reëel getal; np.floor past dit op elke invoerwaarde toe.
Voor −2,3 geeft np.floor de waarde −3,0, omdat −2 boven de oorspronkelijke negatieve waarde zou liggen.
naar boven afronden
Naar boven afronden bepaalt het kleinste gehele getal dat niet kleiner is dan een gegeven reëel getal; np.ceil past dit op arraywaarden toe.
Voor −2,3 geeft np.ceil de waarde −2,0, terwijl de functie voor 2,3 de waarde 3,0 geeft.
NaN
NaN, een afkorting van “not a number” (geen getal), is een drijvendekommamarkering voor ontbrekende waarden en sommige ongeldige resultaten; NaN is zelfs niet gelijk aan zichzelf.
De waarden [4.0, np.nan, 8.0] vereisen drijvendekommaopslag en np.isnan herkent de ontbrekende positie.
ndarray
Een ndarray is het arrayobject van NumPy: een rechthoekige verzameling elementen die langs nul of meer assen zijn gerangschikt en één datatype delen.
Een tabel met 50 records en drie metingen per record kan worden weergegeven als een ndarray met vorm (50, 3).
niet-geïnitialiseerde array
Een niet-geïnitialiseerde array heeft toegewezen opslag waarvan de beginwaarden niet voor gebruik zijn ingesteld. Daarom moeten die waarden worden toegekend voordat je ze leest.
Gebruik np.empty(100) alleen als de daaropvolgende code elk item vult voordat een berekening het gebruikt.
normale verdeling
Een normale verdeling is een symmetrisch klokvormig model dat wordt bepaald door een gemiddelde en standaardafwijking en waaruit je met rng.normal kunt trekken.
Een aanroep met loc=100 en scale=4 gebruikt verdelingsgemiddelde 100 en standaardafwijking 4, niet variantie 4.

O

oneindig
Oneindig is een drijvendekommawaarde die een onbegrensd numeriek resultaat weergeeft, wordt geschreven als inf of -inf en als niet-eindig wordt herkend.
Positieve drijvendekomma-items delen door nul levert bij de standaardinstellingen van NumPy normaal gesproken inf op met een waarschuwing.
opsplitsen
Opsplitsen verdeelt een array langs een as met splitsposities of een gevraagd aantal delen; array_split staat ongelijke lengtes van delen toe.
np.arange(9) splitsen op [2, 6] geeft delen met lengtes 2, 4 en 3 omdat de getallen grenzen zijn.
overloop bij gehele getallen
Overloop bij gehele getallen treedt op wanneer een rekenresultaat buiten het bereik van een geheelgetaltype met vaste breedte komt. Bij arrayberekeningen kan de waarde daardoor teruglopen naar de andere kant van het bereik.
Twee uint8-arrays met 250 en 10 optellen geeft door terugloop 4, omdat dat datatype geen 260 kan bevatten.

P

percentiel
Een percentiel beschrijft een positie in een gesorteerde verdeling op een schaal van 0 tot 100, waarbij NumPy standaard lineair interpoleert.
Het 50e percentiel komt overeen met de mediaan, terwijl het 25e en 75e percentiel de kwartielposities aangeven.
permutatie
Een permutatie herschikt alle invoerposities zonder er één weg te laten of te herhalen en ondersteunt zo geschudde kopieën en willekeurige recordindexen.
Verdeel één rng.permutation(n) in niet-overlappende indexdeelbereiken om elk record aan precies één deelverzameling toe te wijzen.
proef
Een proef is één herhaling van een gesimuleerd experiment, inclusief elke gegenereerde waarde die nodig is om de uitkomst te bepalen.
Als een rij drie muntworpen bevat, beoordeelt reductie over die rij één proef voordat resultaten worden gecombineerd.
pseudowillekeurige reeks
Een pseudowillekeurige reeks wordt geproduceerd door een deterministisch algoritme, maar is ontworpen om zich als willekeurige trekkingen te gedragen voor taken zoals steekproeftrekking en simulatie.
Een analyse met een startwaarde herhalen kan de trekkingsreeks reproduceren wanneer de aanroepen en numerieke omgeving gelijk blijven.

R

reductieas
Een reductieas is de dimensie die door een aggregatie wordt gecombineerd; die verdwijnt uit de uitvoervorm tenzij die met keepdims wordt behouden.
Reductie van as 1 van vorm (6, 4) laat vorm (6,) over, met één resultaat per oorspronkelijke rij.
rijgewijze volgorde
Rijgewijze volgorde doorloopt een array waarbij de laatste index het snelst verandert en leest elke waarde van één rij voordat de volgende rij aan bod komt.
Bij de standaardvormwijziging van [0, 1, 2, 3, 4, 5] naar (2, 3) komt [0, 1, 2] in de eerste rij.

S

selectie met een gehele index
Een selectie met een gehele index kiest één positie op een as en verwijdert die as uit het resultaat, anders dan een deelbereik dat één positie omvat.
Voor een tabel met vorm (8, 3) geeft data[:, 1] de vorm (8,) terug na verwijdering van de kolomas.
simulatie
Een simulatie gebruikt een model en herhaald gegenereerde proeven om uitkomsten zoals de kans op een gebeurtenis of een gemiddelde op lange termijn te schatten.
Een tabel trekken met per proef twee dobbelsteenkolommen ondersteunt het schatten van de frequentie van geselecteerde totalen van twee dobbelstenen.
standaardafwijking
De standaardafwijking meet de spreiding rond het gemiddelde als de vierkantswortel van de variantie en heeft dezelfde eenheid als de oorspronkelijke metingen.
Temperatuurgegevens die met std() worden samengevat gebruiken standaard deler N; ddof=1 kiest de steekproefformule.
standaardfout
Een standaardfout beschrijft de steekproefvariatie van een schatting over herhaalde onafhankelijke uitvoeringen en neemt af naarmate de vierkantswortel van het aantal proeven toeneemt.
Bij een vaste kans op de gebeurtenis halveert een toename van het aantal simulatieproeven van 100 naar 400 ongeveer de standaardfout van het aandeel.
standaardiseren
Standaardiseren trekt een gemiddelde af en deelt door de bijbehorende standaardafwijking die niet nul is, zodat waarden worden uitgedrukt in eenheden van die spreiding.
(X - X.mean(axis=0)) / X.std(axis=0) standaardiseert kolommen waarvan de standaardafwijking niet nul is.
stapelen
Stapelen voegt arrays met gelijke vorm samen langs een nieuwe as waarvan de lengte gelijk is aan het aantal invoerarrays en verhoogt het aantal dimensies met één.
Drie vectoren met lengte vijf langs as 0 stapelen maakt vorm (3, 5), met één invoervector per rij.
stapgrootte
Een stapgrootte is het bedoelde verschil tussen opeenvolgende waarden in een gegenereerde reeks, opgegeven met het derde argument van np.arange.
np.arange(2, 15, 4) gebruikt een stapgrootte van 4 om de reeks [2 6 10 14] te maken.
startwaarde
Een startwaarde levert informatie waarmee de toestand van een toevalsgenerator wordt geïnitialiseerd, zodat de daaropvolgende reeks trekkingen kan worden gereproduceerd.
np.random.default_rng(17) aan het begin maken geeft een herhaalbaar startpunt voor de analyse.
steekproeftrekking met teruglegging
Steekproeftrekking met teruglegging staat toe dat dezelfde invoerpositie meer dan één keer wordt geselecteerd. Dit is het standaardgedrag van rng.choice.
Een steekproef van vijf trekkingen uit drie labels kan een label herhalen omdat elke trekking opnieuw een eerdere positie kan kiezen.

T

toekenning via indexering
Een toekenning via indexering schrijft waarden naar geselecteerde posities van een bestaande array en past de datatype- en vormregels van de bestemming toe.
De regel data[:2, 0] = 0 vervangt de waarden in de eerste kolom van de eerste twee rijen van de tabel.
toevalswandeling
Een toevalswandeling bouwt een pad op door willekeurige stappen cumulatief op te tellen, waarbij elke cumulatieve som de positie na die stap geeft.
Stappen van ±1 simuleren en cumsum(axis=1) toepassen maakt afzonderlijke wandelingsposities langs elke proefrij.
transpositie
Een transpositie verandert de asvolgorde; in een 2-dimensionale array verwisselt die de rollen van rij en kolom met behoud van de relatie van elke waarde tot de oorspronkelijke assen.
Transponeren van een tabel met vorm (2, 5) geeft vorm (5, 2), waarbij elke oorspronkelijke kolom een rij wordt.
typeconversie
Typeconversie geeft waarden weer met een ander datatype; astype geeft een geconverteerde kopie terug en sommige conversies laten informatie verloren gaan.
De aanroep np.array([2.7, 5.1]).astype(int) converteert de waarden naar 2 en 5 zonder naar de dichtstbijzijnde waarde af te ronden.

U

unaire ufunc
Een unaire ufunc neemt één invoer en past de numerieke regel op elk element toe, zoals bij absolute waarde, logaritme of wortel.
np.abs aanroepen op een vector met fouten met teken levert een vector met hun groottes op.
unieke waarden
Unieke waarden zijn de verschillende waarden die in een array voorkomen; np.unique geeft ze gesorteerd terug en kan ook hun bijbehorende aantallen teruggeven.
Een herhaald label verschijnt één keer in de unieke uitvoer, met de frequentie opgeslagen op de bijbehorende positie bij de aantallen.
universele functie
Een universele functie, of ufunc, past een numerieke bewerking elementsgewijs toe op arrays en ondersteunt compatibele invoervormen.
np.sqrt(distances_squared) berekent op elke positie een wortel zonder de scalaire functie math.sqrt van Python te gebruiken.

V

vectorisatie
Vectorisatie drukt herhaalde numerieke berekeningen uit als bewerkingen op volledige arrays en laat NumPy het werk per element in gecompileerde code uitvoeren.
De expressie price * quantity berekent elk regeltotaal zonder afzonderlijke Python-lus over artikelen.
volledige rij
Een volledige rij heeft geen ontbrekende items in de velden; een rijgewijze controle op ontbrekende waarden kan bepalen welke records aan die eis voldoen.
~np.isnan(data).any(axis=1) maakt één waar item voor elk volledig record in een numerieke tabel.
voorwaardelijke samenvatting
Een voorwaardelijke samenvatting berekent een statistische maat alleen voor waarden die met een voorwaarde of label zijn geselecteerd en gebruikt een masker om de bijdragende records te bepalen.
mass[batch == 'B'].mean() berekent alleen het gemiddelde van massa's waarvan het bijbehorende batchlabel B is.
voorwaardelijke selectie
Voorwaardelijke selectie met np.where maakt een resultaat door op ware posities de ene invoer en op onware posities de andere te kiezen.
np.where(x < 0, 0, x) vervangt negatieve waarden door nul in een nieuw resultaat met dezelfde totale selectievorm.
vorm
De vorm van een array is de tuple van de aslengtes in volgorde. Die beschrijft hoe de elementen zijn gerangschikt, niet alleen hoeveel het er zijn.
Vorm (2, 6) beschrijft twee rijen van zes waarden, terwijl vorm (12,) één vector van twaalf waarden beschrijft.
vorm wijzigen
De vorm wijzigen rangschikt een array in een nieuwe asstructuur met behoud van het aantal elementen en leest de waarden standaard rij voor rij.
Twaalf opeenvolgende maandwaarden krijgen vorm (4, 3) als elke rij de drie maanden van één kwartaal moet bevatten.
vrijheidsgradencorrectie
Een vrijheidsgradencorrectie stelt via ddof in hoeveel van het aantal waarden wordt afgetrokken in de deler voor een variantie of standaardafwijking.
Voor vijf waarnemingen en ddof=1 deelt NumPy het totaal van de gekwadrateerde afwijkingen door vier.

W

weergave
Een weergave is een arrayobject dat een bestaande gegevensbuffer deelt, zodat het wijzigen van de items de overeenkomstige opgeslagen waarden in de bron verandert.
Na b = a[1:4] verandert b[0] = 50 de waarde van a[1], omdat het gewone deelbereik gegevens deelt.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag