scipy.linalg.
bandwidth#
- scipy.linalg.bandwidth(a)#
返回 2D 数值数组的下带宽和上带宽。
- 参数:
- andarray
尺寸为 (N, M) 的输入数组
- 返回:
- lutuple
表示下带宽和上带宽的 2 元组整数。0 表示该侧没有子对角线或超对角线(三角形),对于 N 行来说,(N-1) 意味着该侧已满。相同示例适用于下三角部分的 (M-1)。
- 引发:
- TypeError
如果数组的数据类型不受支持,特别是 NumPy float16、float128 和 complex256 数据类型。
说明
此帮助器函数仅遍历数组以查找非零项,无论数组中是否存在带状结构。因此,性能取决于非零项的密度以及内存布局。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)