scipy.linalg.

bandwidth#

scipy.linalg.bandwidth(a)#

Возвращает нижнюю и верхнюю полосу пропускания двумерного числового массива.

Документация написана в предположении, что аргументы-массивы имеют указанные «основные» формы. Однако аргументы-массивы этой функции могут иметь дополнительные «пакетные» измерения, добавленные перед основной формой. В этом случае массив обрабатывается как пакет низкоразмерных срезов; см. Пакетные линейные операции подробности.

Параметры:
andarray

Входной массив размера (N, M)

Возвращает:
luкортеж

Кортеж из 2 целых чисел, указывающий нижнюю и верхнюю полосу пропускания. Ноль обозначает отсутствие под- или наддиагонали с этой стороны (треугольная), и, например, для 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)