scipy.linalg.

頻寬#

scipy.linalg.bandwidth(a)#

返回 2D 數字陣列的下頻寬和上頻寬。

參數:
andarray

尺寸為 (N, M) 的輸入陣列

返回:
lutuple

包含整數的 2-tuple,表示下頻寬和上頻寬。零表示該側沒有次對角線或超對角線(三角形),例如對於 N 行,(N-1) 表示該側已滿。相同的例子適用於具有 (M-1) 的上三角形部分。

引發:
TypeError

如果不支持陣列的 dtype,特別是 NumPy float16、float128 和 complex256 dtype。

說明

此輔助函數僅遍歷陣列,尋找非零條目,無論陣列中是否存在帶狀結構。因此,效能取決於非零條目的密度以及記憶體佈局。Fortran 或 C 連續陣列的處理效果最佳,否則會遭受額外的隨機記憶體存取成本。

策略是分別在上下三角形部分中僅尋找未測試的帶元素;根據記憶體佈局,我們按行或按列掃描。此外,假設我們正在掃描行,並且在第 6 行,第 4 個條目是非零的,那麼在後續的行中,水平搜尋僅在該帶條目之前完成,因為我們知道該帶已被佔用。因此,完全密集矩陣掃描成本與 n 成正比。

範例

>>> 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)