scipy.linalg.
带宽#
- scipy.linalg.bandwidth(a)#
返回二维数值数组的下带宽和上带宽。
此文档假定数组参数具有指定的“核心”形状。然而,此函数的数组参数可能在核心形状前附加额外的“批次”维度。在这种情况下,数组被视为低维切片的批次;详情请参阅批处理线性操作。
- 参数:
- andarray
大小为 (N, M) 的输入数组
- 返回:
- lutuple
一个包含两个整数的元组,指示下带宽和上带宽。零表示该侧没有下对角线或上对角线(三角形),例如对于 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)