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)