bandwidth#
- scipy.linalg.bandwidth(a)#
Gibt die untere und obere Bandbreite eines 2D-numerischen Arrays zurück.
Die Dokumentation wurde unter der Annahme verfasst, dass die Array-Argumente bestimmte „Kern“-Formen haben. Array-Argumente dieser Funktion können jedoch zusätzliche „Batch“-Dimensionen vorangestellt haben. In diesem Fall wird das Array als Stapel von niedrigdimensionalen Schnitten behandelt; siehe Gestapelte lineare Operationen für Details.
- Parameter:
- andarray
Eingabearray der Größe (N, M)
- Rückgabe:
- luTupel
2-Tupel von Ganzzahlen, das die untere und obere Bandbreite angibt. Null bedeutet keine Sub- oder Superdiagonale auf dieser Seite (dreieckig), und z. B. für N Zeilen (N-1) bedeutet, dass diese Seite voll ist. Das gleiche Beispiel gilt für den oberen Dreiecksteil mit (M-1).
- Löst aus:
- TypeError
Wenn der Datentyp des Arrays nicht unterstützt wird, insbesondere die NumPy-Datentypen float16, float128 und complex256.
Hinweise
Diese Hilfsfunktion durchläuft einfach das Array und sucht nach den Nicht-Null-Einträgen, ob eine Bandstruktur im Array vorhanden ist oder nicht. Daher hängt die Leistung von der Dichte der Nicht-Null-Einträge und dem Speicherlayout ab. Fortran- oder C-kontinuierliche Arrays werden am besten behandelt, andernfalls fallen zusätzliche Kosten für zufällige Speicherzugriffe an.
Die Strategie besteht darin, nur ungetestete Bandelemente im oberen und unteren Dreiecksteil separat zu betrachten; Abhängig vom Speicherlayout scannen wir zeilenweise oder spaltenweise. Außerdem, sagen wir, wir scannen Zeilen und im 6. Zeile ist der 4. Eintrag ungleich Null, dann wird bei den nachfolgenden Zeilen die horizontale Suche nur bis zu diesen Band-Einträgen durchgeführt, da wir wissen, dass dieses Band belegt ist. Daher sind die Kosten für einen vollständig dichten Matrixscan in der Größenordnung von n.
Beispiele
>>> import numpy as np >>> from scipy.linalg import bandwidth >>> A = np.array([[3., 0., 0., 0., 0.], ... [0., 4., 0., 0., 0.], ... [0., 0., 5., 1., 0.], ... [8., 0., 0., 6., 2.], ... [0., 9., 0., 0., 7.]]) >>> bandwidth(A) (3, 1)