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)