Denne opplæringen var opprinnelig bidratt med Justin Johnson.
Vi vil bruke Python programmeringsspråk for alle oppgaver i dette kurset.Python er et flott generell programmering språk på egen hånd, men med thehelp av noen populære biblioteker (numpy, scipy, matplotlib), blir det en powerfulenvironment for vitenskapelig databehandling.,
Vi regner med at mange av dere vil ha noen erfaring med Python og numpy, for resten av dere, er denne delen vil tjene som en rask lynkurs på boththe Python programmeringsspråk og det er bruk for scientificcomputing. Vi vil også innføre bærbare pc-er, som er en veldig praktisk wayof fiksing og triksing med Python-kode. Noen av dere har kanskje tidligere kunnskap i adifferent språk, i dette tilfellet anbefaler vi også referere til:NumPy for Matlab-brukere,Python for R-brukere, og/orPython for SAS-brukere.,
- Viser
- Ordbøker
- Angir
- Tupler
- Matriser
- Array indeksering
- Datatyper
- Array matematikk
- Kringkasting
- Numpy Dokumentasjon
- Bilde operasjoner
- MATLAB-filer
- Avstand mellom punkt
- Plotting
- Subplots
- Bilder
Jupyter og Colab Bærbare
Før vi dykke inn i Python, vi ønsker å snakke kort om bærbare pc-er.,En Jupyter bærbar pc kan du skrive og executePython kode lokalt i nettleseren din. Jupyter notebooksmake det svært enkelt å tinker med kode og utfører det i bitsand stykker, og dette er årsaken til at de er mye brukt i scientificcomputing.Colab på den annen side er Googles smak ofJupyter bærbare pc-er som er spesielt egnet for machinelearning og data-analyse, og som går helt i skyen.,Colab er i utgangspunktet Jupyter notebook på steroider: det er gratis, krever ingen setup,kommer forhåndsinstallert med mange pakker, er lett å dele med verden,og drar nytte av gratis tilgang til maskinvare aktiviteter som Gpu og TPUs (med noen forbehold).
Kjør Opplæringen i Colab (anbefales). Hvis du ønsker å kjøre denne opplæringen helt i Colab, klikk Open in Colab
– merke på toppen av denne siden.
Kjør Opplæringen i Jupyter Notebook., Hvis du ønsker å kjøre den bærbare lokalt med Jupyter, sørg for virtual environment er installert på riktig måte (som per oppsett instruksjoner), aktivere den, og deretter kjøre pip install notebook
for å installere Jupyter notebook. Neste, åpne den bærbare datamaskinen og laste det ned til en katalog av ditt valg ved å høyreklikke på siden og velge Save Page As
. Deretter cd
til denne katalogen og kjøre jupyter notebook
.
Dette bør starte automatisk en bærbar pc server på .,Hvis alt fungerte som det skulle, bør du se et skjermbilde som dette, som viser allavailable notatblokker i den gjeldende katalogen. Klikk
jupyter-notebook-tutorial.ipynb
og følg instruksjonene i notebook. Ellers, du kan fortsette å lese thetutorial med kodebiter nedenfor.
Python
Python er et høy-nivå, dynamisk skrevet multiparadigm programmeringsspråk.Python-kode er ofte sagt å være nesten som pseudocode, siden det lar youto express svært kraftige ideer i svært få linjer med kode, mens du blir veryreadable., Som et eksempel, her er en implementering av den klassiske quicksortalgorithm i Python:
Python versjoner
Som av Janurary 1, 2020, Python har offisielt droppet støtte for python2
.For denne klassen all kode vil bruke Python 3.7. Sørg for at du har gått gjennom oppsettet instructionsand riktig installert en python3
virtuelt miljø før du fortsetter med denne opplæringen.Du kan dobbeltsjekke din Python versjon på kommando linje etter å aktivere din environmentby kjører python --version
.,
Grunnleggende datatyper
Som de fleste språk, Python har en rekke grunnleggende typer, inkludert heltall,flyter, booleans, og strenger. Disse typer data, oppfører seg på måter som arefamiliar fra andre programmeringsspråk.
Tall: Heltall og flyter arbeid som du ville forvente fra andre språk:
Merk at i motsetning til mange språk, Python ikke har mono-tilvekst (x++
)eller redusere (x--
) operatører.
Python har også innebygd typer for komplekse tall, og du kan finne alle de detailsin dokumentasjonen.,
Booleans: Python implementerer alle de vanlige operatorene for Boolsk logikk,men bruker engelske ord i stedet for symboler (&&
, ||
, osv.):
Strenger: Python har stor støtte for strenger (string):
String-objekter har en haug med nyttige metoder, for eksempel:
Du kan finne en liste over alle string-metoder i dokumentasjonen.
Beholdere
Python inneholder flere innebygde container typer: lister, ordbøker, sett og tupler.,
Viser
En liste er Python tilsvarende av et utvalg, men er resizeableand kan inneholde elementer av ulike typer:
Som vanlig, du kan finne alle de blodige detaljer om listsin dokumentasjonen.
Kutting:I tillegg til å få tilgang til listen elementer, ett av gangen, Python providesconcise syntaks for å få tilgang underlister; dette er kjent som kutting:
Vi vil se kutting igjen i sammenheng med numpy-matriser.,
Loops: Du kan sløyfe over elementene i en liste som dette:
– >
animals = for animal in animals: print(animal)# Prints "cat", "dog", "monkey", each on its own line.
Hvis du ønsker tilgang til indeksen for hvert element i hoveddelen av en løkke,kan du bruke den innebygde enumerate
funksjoner:
List comprehensions:Når du programmerer, ofte ønsker vi å forvandle en datatype til en annen.,Som et enkelt eksempel, bør du vurdere følgende kode som regner ut kvadrat tall:
– >
nums = squares = for x in nums: squares.append(x ** 2)print(squares) # Prints
Du kan gjøre koden enklere ved hjelp av en liste forståelse:
– >
nums = squares = print(squares) # Prints
List comprehensions kan også inneholde vilkår:
– >
nums = even_squares = print(even_squares) # Prints ""
Ordbøker
En ordbok butikker (nøkkel, verdi) – par, lik en Map
i Java oran objekt i Javascript., Du kan bruke det som dette:
Du kan finne alt du trenger å vite om dictionariesin dokumentasjonen.
Loops: Det er lett å iterere over tastene i en ordliste:
Hvis du ønsker tilgang til nøkler og deres tilhørende verdier, kan du bruke items
metode:
Ordliste comprehensions:Disse ligner list comprehensions, men lar deg enkelt constructdictionaries. For eksempel:
– >
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}"
Angir
Et sett er en unummerert samling av forskjellige elementer., Som et enkelt eksempel, considerthe følgende:
Som vanlig, alt du ønsker å vite om sett kan være foundin den dokumentasjon.,
Loops:Iterating over en sett har samme syntaks som iterating over en liste, men siden sett er usortert, du kan ikke gjøre forutsetninger om orderin som du besøker elementene i settet:
– >
animals = {'cat', 'dog', 'fish'}for idx, animal in enumerate(animals): print('#%d: %s' % (idx + 1, animal))# Prints "#1: fish", "#2: dog", "#3: cat"
Angi comprehensions:Liker lister og ordbøker, kan vi lett konstruere sett ved hjelp av angi comprehensions:
– >
from math import sqrtnums = {int(sqrt(x)) for x in range(30)}print(nums) # Prints "{0, 1, 2, 3, 4, 5}"
Tupler
En tuple er en (uforanderlig) sortert liste av verdier.,En tuple er på mange måter lik en liste; en av de viktigste forskjellene er thattuples kan brukes som nøkler i ordbøker og som elementer i sett, mens lister ikke.Her er et trivielt eksempel:
dokumentasjonen inneholder mer informasjon om tupler.
Funksjoner
Python funksjoner er definert ved hjelp av def
søkeord. For eksempel:
Vi vil ofte definere funksjoner for å ta valgfrie søkeord argumenter, som dette:
Det er mye mer informasjon om Python functionsin dokumentasjonen.,
Klasser
syntaksen for å definere klasser i Python er grei:
Du kan lese mye mer om Python classesin dokumentasjonen.
Numpy
Numpy er kjernen bibliotek for vitenskapelig databehandling i Python.Det gir en høy-ytelse flerdimensjonal array-objektet, og verktøy for å arbeide med thesearrays. Hvis du allerede er kjent med MATLAB, kan du findthis opplæringen nyttig for å komme i gang med Numpy.
– Matriser
En numpy-matrise er et rutenett av verdier, alle av samme type, og er indeksert av en tuple ofnonnegative heltall., Antall dimensjoner er graden av tabellen; den shapeof en matrise er en tuple av heltall som gir størrelsen på matrisen sammen hver dimensjon.
Vi kan initialisere numpy-matriser fra neste Python-lister,og få tilgang til elementer ved hjelp av hakeparenteser:
Numpy gir også mange funksjoner for å lage arrays:
Du kan lese om andre metoder for utvalg creationin dokumentasjonen.
Array indeksering
Numpy tilbyr flere måter å index til matriser.
Kutting:Lik Python-lister, numpy arrays kan være skiver.,Siden matriser kan være flerdimensjonalt, må du angi en bit for hver dimensionof matrisen:
Du kan også blande heltall indeksering med slice indeksering.Men ved å gjøre det vil gi en rekke av lavere rang enn den opprinnelige matrisen.Merk at dette er ganske forskjellig fra den måten at MATLAB håndterer arrayslicing:
Integer array indeksering:Når du index i numpy-matriser ved hjelp av kutting, den resulterende matrisen viewwill alltid være en subarray av den opprinnelige matrisen. I kontrast, heltall arrayindexing lar deg lage tilfeldige matriser ved hjelp av data fra anotherarray., Her er et eksempel:
En nyttig triks med integer array indeksering er å velge eller muterende oneelement fra hver rad i en matrise:
Boolean array indeksering:Boolean array indeksering lar deg plukke ut tilfeldige elementer i en matrise.Ofte er denne typen indeksering brukes til å velge elementer i en arraythat tilfredsstille noen tilstand. Her er et eksempel:
For kortfattethet vi har satt ut en masse detaljer om numpy utvalg indeksering;hvis du ønsker å vite mer du shouldread dokumentasjonen.
Datatyper
Hver numpy-matrise er et rutenett av elementer av samme type.,Numpy gir et stort sett med numeriske datatyper som du kan bruke til å bygge matriser.Numpy forsøker å gjette en datatype når du oppretter en array, men fungerer som constructarrays vanligvis også en ekstra argument for å eksplisitt angi datatype.Her er et eksempel:
Du kan lese alt om numpy datatypesin dokumentasjonen.,
Array matematikk
Grunnleggende matematiske funksjoner operere elementwise på matriser, og er availableboth som operatør overbelastning og som funksjoner i numpy-modul:
Merk at i motsetning til MATLAB, *
er elementwise multiplikasjon, ikke matrixmultiplication. Vi i stedet bruke dot
funksjon for å beregne innerproducts av vektorer, for å multiplisere en vektor med en matrise, og tomultiply matriser., dot
er tilgjengelig både som en funksjon i numpymodule og som et eksempel metode for utvalg objekter:
Numpy gir mange nyttige funksjoner for å utføre beregninger onarrays, en av de mest nyttige er sum
:
Du kan finne den komplette listen av matematiske funksjoner som tilbys av numpyin dokumentasjonen.
Bortsett fra computing matematiske funksjoner ved hjelp av matriser, vi frequentlyneed til å omforme eller på annen måte manipulere data i tabeller., Den enkleste exampleof denne type operasjon er transposing en matrise; for å transponere en matrise,bare bruk T
egenskap av en matrise, objekt:
Numpy gir mange flere funksjoner for å manipulere matriser, og du kan se den fulle listin dokumentasjonen.
Kringkasting
Broadcasting er en kraftig mekanisme som tillater numpy å arbeide med matriser av differentshapes når du utfører aritmetiske operasjoner. Ofte har vi et mindre utvalg og alarger utvalg, og vi ønsker å bruke mindre array flere ganger for å utføre noen operationon større utvalg.,
For eksempel, la oss anta at vi ønsker å legge til en konstant vektor å eachrow av en matrise. Vi kunne gjøre det som dette:
Dette fungerer, men når matrix x
er veldig stor, databehandling et eksplisitt loopin Python kan være treg. Merk at å legge til vector v
til hver rad i matrisenx
er det samme som å danne en matrise vv
ved å stable flere kopier av v
vertikalt,deretter utfører elementwise summering av x
og vv
., Vi kunne gjennomføre thisapproach som dette:
Numpy kringkasting gjør det mulig for oss å utføre denne beregningen uten actuallycreating flere kopier av v
., Vurder denne versjonen, med kringkasting:
line y = x + v
fungerer selv om x
har formen (4, 3)
og v
har formen(3,)
på grunn av kringkasting; denne linjen virker som om v
faktisk hadde formen (4, 3)
,der hver rad var en kopi av v
, og summen ble utført elementwise.,
Kringkasting to matriser sammen følger disse reglene:
- Hvis matrisene ikke har samme verdi, sette _root. form av lavere rang arraywith 1s til begge former har samme lengde.
- to matriser er sagt å være kompatible i en dimensjon hvis de har samesize i dimensjon, eller hvis en av matriser har størrelse 1 i denne dimensjonen.
- arrays kan bli sendt sammen hvis de er kompatible i alle dimensjoner.
- Etter kringkasting, hver matrise oppfører seg som om den hadde form som er lik den elementwisemaximum former av de to input-matriser.,
- I en dimensjon der en array hadde størrelse 1 og den andre matrisen hadde størrelse som er større enn 1,den første matrisen oppfører seg som om det var kopiert langs denne dimensjonen
Dersom denne forklaringen er det ikke fornuftig, kan du prøve å lese explanationfrom den documentationor denne forklaringen.
Funksjoner som støtte kringkasting er kjent som en universell funksjoner. Du kan findthe liste over alle universal functionsin dokumentasjonen.,
Her er noen programmer i kringkasting:
Kringkasting vanligvis gjør koden mer konsis og raskere, så youshould streber etter å bruke det der det er mulig.
Numpy Dokumentasjon
Denne korte oversikten har rørt på mange av de viktige tingene som du trenger toknow om numpy, men er langt fra komplett. Sjekk ut thenumpy referenceto finne ut mye mer om numpy.
SciPy
Numpy gir en høy-ytelse flerdimensjonal array og grunnleggende verktøy tocompute med og manipulere disse matrisene.,SciPybuilds på dette, og providesa stort antall funksjoner som opererer på numpy-matriser, og er nyttig fordifferent typer vitenskapelige og tekniske anvendelser.
Den beste måten å bli kjent med SciPy er tobrowse dokumentasjonen.Vi vil fremheve noen deler av SciPy at du kan finne nyttig for denne klassen.
Bilde operasjoner
SciPy gir noen grunnleggende funksjoner for å arbeide med bilder.For eksempel, det har funksjoner for å lese bilder fra disk i numpy-systemer,til å skrive numpy-matriser til disk som bilder, og for å endre størrelsen på bilder.,Her er et enkelt eksempel som viser disse funksjonene:
MATLAB-filer
funksjoner scipy.io.loadmat
og scipy.io.savemat
tillate deg å lese andwrite MATLAB-filer. Du kan lese om themin dokumentasjon.
Avstand mellom punktene
SciPy definerer noen nyttige funksjoner for å beregne avstander mellom sett av poeng.,
funksjon scipy.spatial.distance.pdist
regner ut avstanden mellom alle pairsof poeng i et gitt sett:
Du kan lese alle detaljene om dette functionin dokumentasjonen.
En lignende funksjon (scipy.spatial.distance.cdist
) regner ut avstanden mellom alle pairsacross to sett av poeng; du kan lese om itin dokumentasjonen.
Matplotlib
Matplotlib er en plotting bibliotek.I dette avsnittet gi en kort introduksjon til matplotlib.pyplot
modulen,noe som gir en plotting system som ligner på MATLAB.,
Plotting
Den viktigste funksjonen i matplotlib er plot
,som du kan bruke til å tegne 2D-data. Her er et enkelt eksempel:
når du Kjører denne koden gir følgende plot:
Med bare en liten bit av ekstra arbeid kan vi lett tomten flere linesat en gang, og legge til en tittel, bildetekst, og akser etiketter:
Du kan lese mye mer om plot
functionin dokumentasjonen.,
Subplots
Du kan plotte forskjellige ting i samme figur ved hjelp av det subplot
funksjon.Her er et eksempel:
Du kan lese mye mer om subplot
functionin dokumentasjonen.
Bilder
Du kan bruke imshow
funksjon for å vise bilder. Her er et eksempel: