Python

Python Menu

SciPy ist eine Bibliothek für wissenschaftliche Berechnungen, die NumPy als Basis verwendet. Es steht für Scientific Python. Sie bietet weitere Hilfsfunktionen für Optimierung, Statistik und Signalverarbeitung.SciPy wurde von Travis Olliphant erstellt.

Installation von SciPy

Wenn du Python und PIP bereits auf einem System installiert hast, installiere es mit diesem Befehl:

pip install scipy

Sobald SciPy installiert ist, importiere das/die SciPy-Modul(e), die du in deinen Anwendungen verwenden möchtest, indem du die Anweisung from scipy import module hinzufügst:

from scipy import constants

Unit-Kategorien

Die Einheiten in SciPy können unter diese Kategorien fallen:

  • Metric
  • Binary
  • Mass
  • Angle
  • Time
  • Length
  • Pressure
  • Volume
  • Speed
  • Temperature
  • Energy
  • Power
  • Force

Unit-Kategorien Verwendung:

Metric (gibt die angegebene Einheit in Meter zurück):

from scipy import constants
print(constants.centi) print(constants.milli)

Binary (Gibt die angegebene Einheit in Bytes zurück):

from scipy import constants
print(constants.gibi) print(constants.tebi)

Mass (Gibt die angegebene Einheit in kg an):

from scipy import constants
print(constants.pound) print(constants.oz)

Angle (Gibt die angegebene Einheit im Bogenmaß zurück):

from scipy import constants
print(constants.degree) print(constants.arcsec)

Time (Rückgabe der angegebenen Einheit in Sekunden):

from scipy import constants
print(constants.hour) print(constants.year)

Length (Gibt die angegebene Einheit in Metern zurück):

from scipy import constants
print(constants.yard) print(constants.nautical_mile)

Pressure (Rückgabe der angegebenen Einheit in Pascal):

from scipy import constants
print(constants.mmHg) print(constants.psi)

Area (Rückgabe der angegebenen Einheit in Quadratmetern):

from scipy import constants
print(constants.hectare) print(constants.acre)

Volume (Rückgabe der angegebenen Einheit in Kubikmetern):

from scipy import constants
print(constants.liter) print(constants.fluid_ounce)

Speed (Rückgabe der angegebenen Einheit in Metern pro Sekunde):

from scipy import constants
print(constants.mph) print(constants.mach)

Temperature (Rückgabe der angegebenen Einheit in Kelvin):

from scipy import constants
print(constants.zero_Celsius) print(constants.degree_Fahrenheit)

Energy (Rückgabe der angegebenen Einheit in Joule):

from scipy import constants
print(constants.eV) print(constants.erg) print(constants.Btu)

Power (Rückgabe der angegebenen Einheit in Watt):

from scipy import constants
print(constants.hp) print(constants.horsepower)

Force (Rückgabe der angegebenen Einheit in Newton):

from scipy import constants
print(constants.pound_force) print(constants.kgf)

SciPy-Optimierer

Wurzeln einer Gleichung

NumPy ist in der Lage, Wurzeln für Polynome und lineare Gleichungen zu finden, aber es kann keine Wurzeln für nichtlineare Gleichungen finden. Diese Funktion benötigt zwei Argumente:

  • fun - eine Funktion, die eine Gleichung darstellt.
  • x0 - eine anfängliche Schätzung für die Wurzel.

Die Funktion gibt ein Objekt mit Informationen über die Lösung zurück. Die tatsächliche Lösung wird unter dem Attribut x des zurückgegebenen Objekts angegeben:

from scipy.optimize import root from math import cos
def eqn(x): return x + cos(x)
myroot = root(eqn, 0)
print(myroot.x) print(myroot)

Minimieren einer Kurve

Der höchste Punkt in der gesamten Kurve wird als globales Maximum bezeichnet, während der Rest der hohen Punkte als lokale Maxima bezeichnet werden. Der niedrigste Punkt in der gesamten Kurve wird als globales Minimum bezeichnet, während der Rest der niedrigen Punkte als lokale Minima bezeichnet werden.

Die Funktion scipy.optimize.minimize() kann zur Minimierung der Funktion verwendet werden.

Die Funktion minimize() nimmt die folgenden Argumente entgegen:

  • fun - eine Funktion, die eine Gleichung darstellt.

  • x0 - eine anfängliche Schätzung für die Wurzel.

  • method - Name der zu verwendenden Methode. Zulässige Werte:

    • 'CG'
    • 'BFGS'
    • 'Newton-CG'
    • 'L-BFGS-B'
    • 'TNC'
    • 'COBYLA'
    • 'SLSQP'
  • callback - Funktion, die nach jeder Iteration der Optimierung aufgerufen wird.

  • options - ein Wörterbuch, das zusätzliche Parameter definiert:

{
    "disp": boolean - gibt detaillierte Beschreibung aus
    "gtol": number - die Abweichung des Fehlers
}

Beispiel:

from scipy.optimize import minimize
def eqn(x): return x**2 + x + 2
mymin = minimize(eqn, 0, method='BFGS')
print(mymin)

SciPy Graphen

Die Methode connected_components() findet alle verbundenen Komponenten in einem Graphen.

import numpy as np from scipy.sparse.csgraph import connected_components from scipy.sparse import csr_matrix
arr = np.array([ [0, 1, 2], [1, 0, 0], [2, 0, 0] ])
neuerarr = csr_matrix(arr)
print(connected_components(neuerarr))

Die dijkstra-Methode findet den kürzesten Weg in einem Graphen von einem Element zum anderen

Sie nimmt folgende Argumente entgegen:

  • return_predecessors: boolean (True, um den gesamten Pfad der Durchquerung zurückzugeben, sonst False).
  • indices: Index des Elements, um nur alle Pfade von diesem Element zurückzugeben.
  • limit: Maximales Gewicht des Pfades.
import numpy as np from scipy.sparse.csgraph import dijkstra from scipy.sparse import csr_matrix
arr = np.array([ [0, 1, 2], [1, 0, 0], [2, 0, 0] ])
neuerarr = csr_matrix(arr)
print(dijkstra(neuerarr, return_predecessors=True, indices=0))

Die Methode floyd_warshall() findet den kürzesten Weg zwischen allen Elementpaaren.

import numpy as np from scipy.sparse.csgraph import floyd_warshall from scipy.sparse import csr_matrix
arr = np.array([ [0, 1, 2], [1, 0, 0], [2, 0, 0] ])
neuerarr = csr_matrix(arr)
print(floyd_warshall(neuerarr, return_predecessors=True))

Die Methode bellman_ford() findet ebenfalls den kürzesten Pfad zwischen allen Paaren von Elementen, aber diese Methode kann auch mit negativen Gewichten umgehen.

import numpy as np from scipy.sparse.csgraph import bellman_ford from scipy.sparse import csr_matrix
arr = np.array([ [0, -1, 2], [1, 0, 0], [2, 0, 0] ])
neuerarr = csr_matrix(arr) print(bellman_ford(neuerarr, return_predecessors=True, indices=0))

Die Methode depth_first_order() liefert eine Traversierung in der Tiefe zuerst von einem Knoten

Diese Funktion nimmt folgende Argumente entgegen:

  • den Graphen
  • das Startelement, von dem aus der Graph durchlaufen werden soll.
import numpy as np from scipy.sparse.csgraph import depth_first_order from scipy.sparse import csr_matrix
arr = np.array([ [0, 1, 0, 1], [1, 1, 1, 1], [2, 1, 1, 0], [0, 1, 0, 1] ])
neuerarr = csr_matrix(arr)
print(depth_first_order(neuerarr, 1))

Die Methode breadth_first_order() gibt eine "breadth first traversal" von einem Knoten zurück.

Diese Funktion nimmt folgende Argumente entgegen:

  • den Graphen
  • das Startelement, von dem aus der Graph traversiert werden soll
import numpy as np from scipy.sparse.csgraph import breadth_first_order from scipy.sparse import csr_matrix
arr = np.array([ [0, 1, 0, 1], [1, 1, 1, 1], [2, 1, 1, 0], [0, 1, 0, 1] ])
neuerarr = csr_matrix(arr)
print(breadth_first_order(neuerarr, 1))

SciPy Statistische Signifikanztests

Die Funktion ttest_ind() nimmt zwei gleich große Stichproben und erzeugt ein Tupel aus t-Statistik und p-Wert.

import numpy as np from scipy.stats import ttest_ind
v1 = np.random.normal(size=100) v2 = np.random.normal(size=100)
res = ttest_ind(v1, v2) resP = ttest_ind(v1, v2).pvalue print(res) print("P-value = " , resP)

Die Funktion describe() gibt die folgende Beschreibung zurück:

  • Anzahl der Beobachtungen (nobs)
  • minimale und maximale Werte = minmax
  • Mittelwert
  • Varianz
  • Schiefe
  • Wölbung
import numpy as np from scipy.stats import describe
meineDaten = np.random.normal(size=100) ergebnis = describe(meineDaten)
print(ergebnis)

Normalitätstests auf Basis der Schiefe und Kurtosis

import numpy as np from scipy.stats import skew, kurtosis from scipy.stats import normaltest
meineDaten = np.random.normal(size=100)
print("Schiefe = ", skew(meineDaten)) print("Kurtosis = ", kurtosis(meineDaten)) print("Normales Testergebnis = ", normaltest(meineDaten))

Einführung

Python Basics

Python Advance

Data Science Python Tutorials

Python Eingebaute Funktionen