scipy.linalg.bandwidth¶
- scipy.linalg.bandwidth(a)¶
返回二维数值数组的下限带宽和上限带宽。
- 参数
- andarray
大小为(N,M)的输入数组
- 退货
- lu元组
指示较低和较高带宽的整数的2元组。零表示该边(三角形)没有次对角线或超对角线,如果是N行(N-1),则表示该边已满。同样的示例也适用于具有(M-1)的上三角形部分。
- 加薪
- TypeError
如果不支持数组的数据类型,特别是NumPy浮点16、浮点128和复杂256数据类型。
注意事项
无论数组中是否存在带状结构,此帮助器函数都会简单地遍历数组,查找非零条目。因此,性能取决于非零条目的密度以及内存布局。Fortran或C连续数组处理得最好,否则会受到额外的随机存储器访问成本的影响。
策略是分别在上三角部分和下三角形部分中查找未测试的带元素;根据内存布局,我们按行或按列扫描。此外,假设我们正在扫描行,并且在第6行中,第4个条目是非零的,那么在后续行上,水平搜索仅进行到该波段条目,因为我们知道该波段已被占用。因此,完全密集的矩阵扫描成本约为n。
示例
>>> 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)