Spec-Zone.ru › Octave 9

22.1.4.2 Типы возвращаемых значений операторов и функций

Две основные причины использовать разреженные матрицы — уменьшить расход памяти и избежать вычислений над нулевыми элементами. Эти причины тесно связаны: время вычисления при использовании оператора или функции для разреженной матрицы примерно линейно зависит от числа ненулевых элементов.

Поэтому существует определённая плотность ненулевых элементов матрицы, при которой хранить её как разреженную матрицу уже не имеет смысла; лучше хранить её как полную матрицу. По этой причине операторы и функции, которые с высокой вероятностью возвращают полную матрицу, всегда возвращают именно её. Например, прибавление скалярной константы к разреженной матрице почти всегда превращает её в полную матрицу, поэтому приведённый пример

speye (3) + 0
⇒   1  0  0
  0  1  0
  0  0  1

возвращает полную матрицу, что можно увидеть.

Поскольку существуют все смешанные операторы и функции для полных и разреженных матриц, обычно это не вызывает проблем. Однако проблема возникает в случае, когда разреженная матрица преобразуется в полную, а последующие операции снова делают её разреженной. Такие случаи редки, но их можно создать искусственно; например, (fliplr (speye (3)) + speye (3)) - speye (3) возвращает полную матрицу, хотя должна возвращать разреженную. Как правило, в таких случаях дополнительные затраты памяти невелики.

Однако известен один случай, когда такое поведение разреженных матриц в Octave вызывает проблему. Речь идёт об обработке функции diag. Возвращает ли diag разреженную или полную матрицу, зависит от типа входных аргументов. Поэтому

a = diag (sparse ([1,2,3]), -1);

должно возвращать разреженную матрицу. Чтобы гарантировать это, функция sparse и другие основанные на ней функции, например speye, всегда возвращают разреженную матрицу, даже если она занимает больше памяти, чем её полное представление.

© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/Return-Types-of-Operators-and-Functions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API