Разреженные матрицы (scipy.sparse) — SciPy v1.10.1 Manual
SciPy Пакет двумерных разреженных массивов для числовых данных.
Примечание
Этот пакет переключается на интерфейс массива, совместимый с
Массивы NumPy из старого матричного интерфейса. Мы рекомендуем это
вы используете объекты массива ( bsr_array
, coo_array
и т. д.) для
все новые работы.
При использовании интерфейса массива обратите внимание, что:
x * y
больше не выполняет умножение матриц, но поэлементное умножение (как и в случае с массивами NumPy). К заставить код работать как с массивами, так и с матрицами, используйтеx @ y
для умножение матриц.Операции, такие как sum , которые раньше производили плотные матрицы, теперь создавать массивы, поведение умножения которых отличается аналогичным образом.
Разреженные массивы в настоящее время должны быть двумерными. Это также означает что все
Строительные коммунальные услуги ( глаз
, крон
, рандом
, диагс
и т.д.)
еще не портированы, но их результаты можно завернуть в массивы:
A = csr_array(eye(3))
Содержимое
Классы разреженного массива
| Блочный массив разреженных строк |
| Разреженный массив в формате COOrdinate. |
| Сжатый массив разреженных столбцов |
| Сжатый массив разреженных строк |
| Разреженный массив с диагональным хранилищем |
| Словарь ключей на основе разреженного массива. |
| Разреженный массив LIst of List на основе строк |
Классы разреженных матриц
| Блочная матрица разреженных строк |
| Разреженная матрица в формате COOrdinate. |
| Сжатая матрица разреженных столбцов |
| Сжатая матрица разреженных строк |
| Разреженная матрица с памятью DIAgonal |
| Словарь ключей на основе разреженной матрицы. |
| Строковый список списков разреженной матрицы |
| Этот класс обеспечивает базовый класс для всех разреженных матриц. |
Функции
Построение разреженных матриц:
| Разреженная матрица с единицами по диагонали |
| Идентификационная матрица в разреженном формате |
| произведение Кронекера разреженных матриц A и B |
| сумма Кронекера разреженных матриц A и B |
| Построить разреженную матрицу из диагоналей. |
| Возвращает разреженную матрицу из диагоналей. |
| Построить блочно-диагональную разреженную матрицу из предоставленных матриц. |
| Возврат нижней треугольной части матрицы в разреженном формате |
| Вернуть верхнюю треугольную часть матрицы в разреженном формате |
| Построить разреженную матрицу из разреженных подблоков |
| Складывать разреженные матрицы горизонтально (по столбцам) |
| Стек разреженных матриц вертикально (построчно) |
| Создать разреженную матрицу заданной формы и плотности с равномерно распределенными значениями. |
| Создать разреженную матрицу заданной формы и плотности со случайно распределенными значениями. |
Сохранение и загрузка разреженных матриц:
| Сохранение разреженной матрицы в файл в формате |
| Загрузить разреженную матрицу из файла в формате |
Инструменты для разреженных матриц:
| Возвращает индексы и значения ненулевых элементов матрицы |
Идентификация разреженных матриц:
| Является ли x типом разреженной матрицы? |
| Является ли x типом разреженной матрицы? |
| Имеет ли x тип csc_matrix? |
| Имеет ли x тип csr_matrix? |
| Является ли x типом bsr_matrix? |
| Имеет ли x тип lil_matrix? |
| Имеет ли x тип dok_matrix? |
| Является ли x типом coo_matrix? |
| Имеет ли x тип dia_matrix? |
Субмодули
| Подпрограммы сжатого разреженного графа (scipy. sparse.csgraph) |
| Разреженная линейная алгебра (scipy.sparse.linalg) |
Исключения
| |
|
Информация по использованию
Доступно семь типов разреженных матриц:
csc_matrix: формат сжатого разреженного столбца
csr_matrix: формат сжатой разреженной строки
bsr_matrix: Блокировать формат разреженной строки
lil_matrix: Формат списка списков
dok_matrix: Формат словаря ключей
coo_matrix: формат COOrdinate (он же IJV, триплетный формат)
dia_matrix: формат DIAgonal
Для эффективного построения матрицы используйте либо dok_matrix, либо lil_matrix. Класс lil_matrix поддерживает базовые срезы и причудливую индексацию с помощью аналогичный синтаксис для массивов NumPy. Как показано ниже, формат COO также может быть использован для эффективного построения матриц. Несмотря на их сходство с массивами NumPy, это настоятельно не рекомендуется использовать NumPy работает непосредственно с этими матрицами, потому что NumPy может неправильно преобразовать их для вычислений, что приводит к неожиданным (и неправильным) результатам. Если вы хотите применить функцию NumPy к этим матрицам, сначала проверьте, есть ли в SciPy свою собственную реализацию для данного класса разреженных матриц, или преобразовать разреженной матрицы в массив NumPy (например, используя метод toarray() метода class) перед применением метода.
Для выполнения таких операций, как умножение или инверсия, сначала преобразовать матрицу в формат CSC или CSR. Формат lil_matrix на основе строк, поэтому преобразование в CSR эффективно, тогда как преобразование в CSC меньше.
Все преобразования между форматами CSR, CSC и COO эффективны, операции с линейным временем.
Матричный векторный продукт
Чтобы сделать векторное произведение между разреженной матрицей и вектором, просто используйте
метод матрицы
>>> импортировать numpy как np >>> из scipy.sparse импортировать csr_matrix >>> A = csr_matrix([[1, 2, 0], [0, 0, 3], [4, 0, 5]]) >>> v = np.массив ([1, 0, -1]) >>> А.точка(v) массив([1, -3, -1], dtype=int64)
Предупреждение
Начиная с NumPy 1.7, np.dot не знает о разреженных матрицах, поэтому его использование приведет к неожиданным результатам или ошибкам. Вместо этого сначала следует получить соответствующий плотный массив:
>>> np.dot(A.toarray(), v) массив([1, -3, -1], dtype=int64)
, но тогда все преимущества производительности будут потеряны.
Формат CSR особенно подходит для быстрых матричных векторных произведений.
Пример 1
Создайте lil_matrix размером 1000×1000 и добавьте к ней несколько значений:
>>> из scipy.sparse импортировать lil_matrix >>> из scipy.sparse.linalg импортировать spsolve >>> из numpy.linalg import решить, норма >>> из numpy.random импортировать ранд
>>> A = lil_matrix((1000, 1000)) >>> A[0, :100] = ранд(100) >>> А[1, 100:200] = А[0, :100] >>> A.setdiag(ранд(1000))
Теперь преобразуйте его в формат CSR и решите A x = b для x:
>>> A = A.tocsr() >>> b = ранд(1000) >>> х = spsolve(A, b)
Преобразуйте его в плотную матрицу и решите, и проверьте, что результат то же самое:
>>> x_ = решить(A.toarray(), b)
Теперь мы можем вычислить норму ошибки с помощью:
>>> ошибка = норма(х-х_) >>> ошибка < 1e-10 Истинный
Он должен быть маленьким 🙂
Пример 2
Построить матрицу в формате COO:
>>> из scipy import sparse >>> из массива импорта numpy >>> Я = массив([0,3,1,0]) >>> J = массив ([0,3,1,2]) >>> V = массив([4,5,7,9]) >>> A = sparse. coo_matrix((V,(I,J)),shape=(4,4))
Обратите внимание, что индексы не нужно сортировать.
Повторяющиеся (i,j) записи суммируются при преобразовании в CSR или CSC.
>>> I = массив([0,0,1,3,1,0,0]) >>> J = массив ([0,2,1,3,1,0,0]) >>> V = массив ([1,1,1,1,1,1,1]) >>> B = sparse.coo_matrix((V,(I,J)),shape=(4,4)).tocsr()
Это полезно для построения конечно-элементных матриц жесткости и масс.
Дополнительная информация
Индексы столбцов CSR не обязательно сортируются. Аналогично для строки CSC индексы. Используйте методы .sorted_indices() и .sort_indices(), когда требуются отсортированные индексы (например, при передаче данных в другие библиотеки).
Матрицы ch_3 31.10.06.pmd
%PDF-1.3 % 245 0 объект >>>]/ON[293 0 R]/Порядок[]/RBGroups[]>>/OCGs[293 0 R]>>/Страницы 229 0 R/Тип/Каталог>> эндообъект 246 0 объект >/Шрифт>>>/Поля 225 0 R>> эндообъект 242 0 объект >поток приложение/pdf