deze tutorial werd oorspronkelijk bijgedragen door Justin Johnson.
We zullen de programmeertaal Python gebruiken voor alle opdrachten in deze cursus.Python is een grote algemene programmeertaal op zijn eigen, maar met de hulp van een paar populaire bibliotheken (numpy, scipy, matplotlib) wordt het een krachtige omgeving voor wetenschappelijke computing.,
We verwachten dat velen van u enige ervaring zullen hebben met Python en numpy;voor de rest van u zal deze sectie dienen als een snelle spoedcursus over zowel de programmeertaal Python als het gebruik ervan voor wetenschappelijke berekeningen. We zullen ook notebooks introduceren, die een zeer handige manier zijn om met Python-code te knutselen. Sommigen van jullie hebben misschien voorkennis in een andere taal, in dat geval raden we ook aan om te verwijzen naar:NumPy voor Matlab-gebruikers,Python voor R-gebruikers, en/orPython voor SAS-gebruikers.,
- Geeft
- Woordenboeken
- Zet
- Tupels
- Arrays
- Array indexeren
- Datatypes
- Array wiskunde
- de Uitzending
- Numpy Documentatie
- Afbeelding activiteiten
- MATLAB bestanden
- de Afstand tussen de punten
- Plotten
- Subplots
- Afbeeldingen
Jupyter en Samenwerking Notebooks
Voordat we een duik in Python, willen we kort praten over notebooks.,Een Jupyter notebook kunt u schrijven en uitvoeren thon code lokaal in uw webbrowser. Jupyter notebooksmaak het heel gemakkelijk om te sleutelen aan code en uit te voeren in bitsand stukken; om deze reden worden ze veel gebruikt in wetenschappelijke computing.Colab aan de andere kant is Google ‘ s smaak van Jupyter notebooks die bijzonder geschikt is voor machinelearning en data-analyse en die volledig draait in de cloud.,Colab is in principe Jupyter notebook op steroïden: het is gratis, vereist geen setup, komt vooraf geïnstalleerd met veel pakketten,is gemakkelijk te delen met de wereld, en profiteert van gratis toegang tot hardware accelerators zoals GPU ’s en TPU’ s (met een aantal voorbehouden).
start zelfstudie in Colab (aanbevolen). Als u deze tutorial volledig in Colab wilt draaien, klikt u op de badge Open in Colab
bovenaan deze pagina.
start zelfstudie in Jupyter Notebook., Als u de notebook lokaal met Jupyter wilt draaien, zorg er dan voor dat uw virtuele omgeving correct is geïnstalleerd (volgens de installatieinstructies), activeer deze en voer dan pip install notebook
uit om Jupyter notebook te installeren. Open vervolgens de notebook en download het naar een map naar keuze door met de rechtermuisknop op de pagina te klikken en Save Page As
te selecteren. Dan cd
naar die map en voer jupyter notebook
uit.
Dit moet automatisch een notebookserver starten op .,Als alles correct werkte, zou je een scherm als dit moeten zien, waarin alle beschikbare notebooks in de huidige directory worden getoond. Klik op
jupyter-notebook-tutorial.ipynb
en volg de instructies in de notebook. Anders, kunt u verder lezen thetutorial met code knipsels hieronder.
Python
Python is een dynamisch getypte multiparadigma-programmeertaal op hoog niveau.Python code wordt vaak gezegd dat het bijna als pseudocode, omdat het je toestaat om zeer krachtige ideeën uit te drukken in zeer weinig regels code terwijl ze zeer leesbaar., Als voorbeeld, hier is een implementatie van de klassieke quicksortalgorithm in Python:
Python versies
vanaf januari 1, 2020 heeft Python officieel de ondersteuning voor python2
laten vallen.Voor deze klasse zal alle code Python 3.7 gebruiken. Zorg ervoor dat u de installatieinstructies hebt doorlopen en een python3
virtuele omgeving correct hebt geïnstalleerd voordat u verder gaat met deze tutorial.U kunt uw Python-versie dubbel controleren op de commandoregel na het activeren van uw omgeving door python --version
uit te voeren.,
basistypen
zoals de meeste talen heeft Python een aantal basistypen, waaronder gehele getallen, floats, booleans en strings. Deze gegevenstypen gedragen zich op een manier die vertrouwd is met andere programmeertalen.
getallen: gehele getallen en floats werken zoals je zou verwachten van andere talen:
merk op dat Python in tegenstelling tot veel talen geen unary increment (x++
)of decrement (x--
) operators heeft.
Python heeft ook ingebouwde typen voor complexe getallen;u kunt alle details in de documentatie vinden.,
Booleans: Python implementeert alle gebruikelijke operators voor Booleaanse logica, maar gebruikt Engelse woorden in plaats van symbolen (&&
, ||
, enz.):
Strings: Python heeft grote ondersteuning voor strings:
Stringobjecten hebben een aantal nuttige methoden; bijvoorbeeld:
U kunt een lijst van alle stringmethoden vinden in de documentatie.
Containers
Python bevat verschillende ingebouwde containertypen: lijsten, woordenboeken, sets en tupels.,
Lists
een lijst is het Python-equivalent van een array, maar is herschaalbaar en kan elementen van verschillende types bevatten:
zoals gewoonlijk kunt u alle Gore details over listin de documentatie vinden.
Slicing: naast het één voor één benaderen van lijstelementen, biedt Python concise syntaxis om toegang te krijgen tot sublijsten; dit staat bekend als slicing:
We zullen slicing opnieuw zien in de context van numpy arrays.,
Loops: u kunt lus over de elementen van een lijst als volgt:
animals = for animal in animals: print(animal)# Prints "cat", "dog", "monkey", each on its own line.
Als u toegang wilt tot de index van elk element in het lichaam van een lus,gebruik dan de ingebouwde enumerate
functie:
overzicht:bij het programmeren, vaak gebruiken we wilt u het ene type gegevens in een ander te transformeren.,Als een simpel voorbeeld, beschouw de volgende code die berekent vierkante nummers:
nums = squares = for x in nums: squares.append(x ** 2)print(squares) # Prints
U kunt deze code eenvoudiger met behulp van een lijst-comprehensie:
nums = squares = print(squares) # Prints
Lijst comprehensions kan ook bevatten voorwaarden:
nums = even_squares = print(even_squares) # Prints ""
Woordenboeken
Een woordenboek winkels (key, value) – paren, vergelijkbaar met een Map
in Java oran object in Javascript., U kunt het als volgt gebruiken:
u kunt alles vinden wat u moet weten over woordenboeken in de documentatie.
Loops: het is gemakkelijk om te herhalen over de sleutels in een woordenboek:
Als u toegang wilt tot sleutels en hun bijbehorende waarden, gebruik dan de items
methode:
begrijpelijke taal:deze zijn vergelijkbaar met begrijpelijke woorden, maar u kunt eenvoudig dictionaries construeren. Bijvoorbeeld:
nums = even_num_to_square = {x: x ** 2 for x in nums if x % 2 == 0}print(even_num_to_square) # Prints "{0: 0, 2: 4, 4: 16}"
Sets
Een set is een ongeordende verzameling van verschillende elementen., Als een eenvoudig voorbeeld, overweeg het volgende:
zoals gewoonlijk kan alles wat u wilt weten over sets worden gevonden in de documentatie.,
Lussen:Itereren over een set heeft dezelfde syntax als itereren over een lijst, maar sinds sets zijn ongeordende, je maakt geen veronderstellingen over de orderin dat u een bezoek aan de onderdelen van de set:
animals = {'cat', 'dog', 'fish'}for idx, animal in enumerate(animals): print('#%d: %s' % (idx + 1, animal))# Prints "#1: fish", "#2: dog", "#3: cat"
Stel comprehensions:Zoals lijsten en woordenboeken, kunnen we gemakkelijk construct stelt met behulp van set comprehensions:
from math import sqrtnums = {int(sqrt(x)) for x in range(30)}print(nums) # Prints "{0, 1, 2, 3, 4, 5}"
Tupels
Een tupel is een (onveranderlijke) geordende lijst van waarden.,Een tupel is in veel opzichten vergelijkbaar met een lijst; een van de belangrijkste verschillen is dat veelvouden kunnen worden gebruikt als sleutels in woordenboeken en als elementen van Verzamelingen, terwijl lijsten dat niet kunnen.Hier is een triviaal voorbeeld:
de documentatie bevat meer informatie over tupels.
functies
Python-functies worden gedefinieerd met behulp van hetdef
sleutelwoord. Bijvoorbeeld:
We zullen vaak functies definiëren om optionele sleutelwoordargumenten te nemen, zoals dit:
Er is veel meer informatie over Python-functies in de documentatie.,
klassen
de syntaxis voor het definiëren van klassen in Python is eenvoudig:
u kunt veel meer lezen over Python-klassen in de documentatie.
Numpy
Numpy is de kernbibliotheek voor wetenschappelijke computing in Python.It biedt een high-performance multidimensionale array object, en hulpmiddelen voor het werken met deze stralen. Als u al bekend bent met MATLAB, kunt u deze tutorial nuttig vinden om aan de slag te gaan met Numpy.
Arrays
een numpy array is een raster van waarden, allemaal van hetzelfde type, en wordt geïndexeerd door een tupel van niet-negatieve gehele getallen., Het aantal dimensies is de rang van de array; de vorm van een array is een tupel van gehele getallen die de grootte van de array langs elke dimensie geeft.
We kunnen numpy arrays initialiseren vanuit geneste Python lijsten,en toegang krijgen tot elementen met vierkante haakjes:
Numpy biedt ook veel functies om arrays te maken:
u kunt meer lezen over andere methoden voor het aanmaken van arrays in de documentatie.
Array-indexering
Numpy biedt verschillende manieren om in arrays te indexeren.
Slicing: net als Python lists kunnen numpy arrays worden gesneden.,Omdat arrays multidimensionaal kunnen zijn, moet u een slice opgeven voor elke dimensionvan de array:
u kunt ook integer indexeren mengen met slice indexeren.Dit zal echter een array van lagere rang opleveren dan de originele array.Merk op dat dit heel anders is dan de manier waarop MATLAB arrayslicing afhandelt:
Integer array indexing:wanneer u indexeert naar numpy arrays met behulp van slicing, zal de resulterende array altijd een subarray van de originele array zijn. Integer arrayindex daarentegen stelt u in staat om willekeurige arrays te construeren met behulp van de gegevens van een andere array., Hier is een voorbeeld:
een handige truc met integer array indexing is het selecteren of muteren van een element uit elke rij van een matrix:
Boolean array indexing:Boolean array indexing laat je willekeurige elementen van een array kiezen.Vaak wordt dit type indexering gebruikt om de elementen van een reeks te selecteren die aan een bepaalde voorwaarde voldoen. Hier is een voorbeeld:
voor beknoptheid hebben we veel details over numpy array indexing weggelaten;als je meer wilt weten moet je de documentatie lezen.
Datatypes
elke nompy array is een raster van elementen van hetzelfde type.,Numpy biedt een grote set numerieke datatypes die u kunt gebruiken om arrays te construeren.Numpy probeert een datatype te raden wanneer je een array maakt, maar functies die constructarrays bevatten meestal ook een optioneel argument om het datatype expliciet te specificeren.Hier is een voorbeeld:
u kunt alles lezen over numpy datatypein de documentatie.,
Array math
elementaire wiskundige functies werken elementair op arrays, en zijn beschikbaar als operator overloads en als functies in de numpy module:
merk op dat in tegenstelling tot MATLAB, *
is elementair vermenigvuldigen, niet matrixmultiplication. In plaats daarvan gebruiken we de functie dot
om innerproducten van vectoren te berekenen, om een vector te vermenigvuldigen met een matrix, en om multiply matrices., dot
is zowel beschikbaar als een functie in de numpymodule als als een instantiemethode van array-objecten:
Numpy biedt vele nuttige functies voor het uitvoeren van berekeningen op arrays; een van de meest bruikbare is sum
:
u kunt de volledige lijst van wiskundige functies vinden die nump biedt in de documentatie.
behalve het berekenen van wiskundige functies met behulp van arrays, moeten we vaak gegevens in arrays opnieuw vormgeven of anderszins manipuleren., Het eenvoudigste voorbeeld van dit type operatie is het transponeren van een matrix; om een matrix te transponeren,gebruik je gewoon het T
attribuut van een array object:
Numpy biedt veel meer functies voor het manipuleren van arrays; je kunt de volledige lijst in de documentatie zien.
Broadcasting
Broadcasting is een krachtig mechanisme waarmee numpy kan werken met arrays van verschillende vormen bij het uitvoeren van rekenkundige bewerkingen. Vaak hebben we een kleinere array en een grotere array, en we willen de kleinere array meerdere keren gebruiken om een operatie uit te voeren op de grotere array.,
bijvoorbeeld, stel dat we een constante vector willen toevoegen aan elke groei van een matrix. We zouden het als volgt kunnen doen:
Dit werkt; maar als de matrix x
erg groot is, kan het berekenen van een expliciete loopin Python traag zijn. Merk op dat het toevoegen van de vector v
aan elke rij van de matrixx
gelijk is aan het vormen van een matrix vv
door meerdere kopieën van v
verticaal te stapelen en vervolgens de optelling van x
en vv
., We zouden deze aanpak als volgt kunnen implementeren:
Numpy broadcasting stelt ons in staat om deze berekening uit te voeren zonder daadwerkelijk meerdere kopieën van v
te maken., Overweeg deze versie, met behulp van uitzending:
De regel y = x + v
werkt ook al x
heeft de vorm (4, 3)
en v
heeft de vorm(3,)
door omroep; deze regel werkt als v
eigenlijk had de vorm (4, 3)
,waarbij elke rij was een kopie van de v
, en de som werd uitgevoerd elementwise.,
twee arrays samen uitzenden volgt deze regels:
- als de arrays niet dezelfde rang hebben, vervang dan de vorm van de array met 1s tot beide vormen dezelfde lengte hebben.
- de twee arrays zijn compatibel in een dimensie als ze de samesize in de dimensie hebben, of als een van de arrays Grootte 1 in die dimensie heeft.
- de arrays kunnen samen worden uitgezonden als ze compatibel zijn in alle dimensies.
- na het uitzenden gedraagt elke array zich alsof hij een vorm heeft die gelijk is aan het elementwisemaximum van vormen van de twee invoerarrays.,
- in elke dimensie waar een array Grootte 1 had en de andere array grootte groter dan 1,gedraagt de eerste array zich alsof hij gekopieerd werd langs die dimensie
als deze uitleg niet zinvol is, probeer dan de uitleg uit de documentatieof deze uitleg te lezen.
functies die omroep ondersteunen staan bekend als universele functies. U kunt de lijst met alle universele functies vinden in de documentatie.,
Hier zijn enkele toepassingen van broadcasting:
Broadcasting maakt uw code doorgaans beknopter en sneller, dus u moet ernaar streven om het waar mogelijk te gebruiken.
Numpy documentatie
Dit korte overzicht heeft veel van de belangrijke dingen aangeroerd die u over numpy moet weten, maar is verre van compleet. Check out thenumpy referenceom veel meer te weten te komen over numpy.
SciPy
Numpy biedt een high-performance multidimensionale array en basic tools om deze arrays te verwerken en te manipuleren.,SciPybuilds op dit, en biedt een groot aantal functies die werken op numpy arrays en zijn nuttig voor verschillende soorten wetenschappelijke en technische toepassingen.
De beste manier om vertrouwd te raken met SciPy is de documentatie door te bladeren.We zullen enkele delen van SciPy benadrukken die je nuttig zou kunnen vinden voor deze klas.
Afbeeldingsbewerkingen
SciPy biedt enkele basisfuncties om met afbeeldingen te werken.Het heeft bijvoorbeeld functies om afbeeldingen van schijf in numpy arrays te lezen, numpy arrays als images naar schijf te schrijven en afbeeldingen te verkleinen.,Hier is een eenvoudig voorbeeld dat deze functies laat zien:
MATLAB-bestanden
met de functies scipy.io.loadmat
en scipy.io.savemat
kunt u MATLAB-bestanden lezen en schrijven. U kunt hierover lezen in de documentatie.
afstand tussen punten
SciPy definieert enkele nuttige functies voor het berekenen van afstanden tussen verzamelingen van punten.,
De functie scipy.spatial.distance.pdist
berekent de afstand tussen alle paren punten in een gegeven verzameling:
u kunt alle details over deze functie lezen in de documentatie.
een soortgelijke functie (scipy.spatial.distance.cdist
) berekent de afstand tussen alle pairsacross twee sets van punten; u kunt hierover lezen in de documentatie.
Matplotlib
Matplotlib is een plot library.In deze sectie geeft een korte introductie van dematplotlib.pyplot
module, die een plotsysteem biedt vergelijkbaar met dat van MATLAB.,
plotten
de belangrijkste functie in matplotlib is plot
,waarmee u 2D-gegevens kunt plotten. Hier is een eenvoudig voorbeeld:
het uitvoeren van deze code levert de volgende plot op:
met een klein beetje extra werk kunnen we eenvoudig meerdere regels tegelijk plotten, en een titel, legende en aslabels toevoegen:
u kunt lezen veel meer over de functie plot
in de documentatie.,
Subplots
u kunt verschillende dingen plotten in dezelfde figuur met behulp van de subplot
functie.Hier is een voorbeeld:
u kunt veel meer lezen over de functie subplot
in de documentatie.
afbeeldingen
u kunt de functie imshow
gebruiken om afbeeldingen te tonen. Hier is een voorbeeld: