PIP 5.9.0
Platform-Independent Primitives
Загрузка...
Поиск...
Не найдено
Шаблон класса PIMathMatrix< Type >

Математическая матрица динамического размера. Использует PIVector2D как хранилище и сохраняет интерфейс, согласованный с PIMathMatrixT. Подробнее...

#include <pimathmatrix.h>

Граф наследования:PIMathMatrix< Type >:

Открытые члены

 PIMathMatrix (const uint cols=0, const uint rows=0, const Type &f=Type())
 Конструктор класса PIMathMatrix, который создает матрицу.
 PIMathMatrix (const uint cols, const uint rows, const PIVector< Type > &val)
 Конструктор класса PIMathMatrix, который создает матрицу.
 PIMathMatrix (const PIVector< PIVector< Type > > &val)
 Конструктор класса PIMathMatrix, который создает матрицу.
 PIMathMatrix (const PIVector2D< Type > &val)
 Конструктор класса PIMathMatrix, который создает матрицу.
PIMathMatrix< Type > & setCol (uint index, const PIMathVector< Type > &v)
 Определить выбранный столбец матрицы.
PIMathMatrix< Type > & setRow (uint index, const PIMathVector< Type > &v)
 Определить выбранную строку матрицы.
PIMathMatrix< Type > & swapCols (uint r0, uint r1)
 Метод меняющий местами выбранные строки в матрице.
PIMathMatrix< Type > & swapRows (uint c0, uint c1)
 Метод меняющий местами выбранные строки в матрице.
PIMathMatrix< Type > & fill (const Type &v)
 Метод заполняющий матрицу выбранным значением.
bool isSquare () const
 Метод, проверющий является ли матрица квадратной.
bool isIdentity () const
 Метод, проверяющий содержит ли главная диагональ единицы и все остальные поля нули.
bool isNull () const
 Метод, являются ли все элементы матрицы нулями.
bool isValid () const
 Метод, который проверяет является ли матрица пустой.
void operator+= (const PIMathMatrix< Type > &sm)
 Сложение с присваиванием с матрицей sm.
void operator-= (const PIMathMatrix< Type > &sm)
 Вычитание с присваиванием с матрицей sm.
void operator*= (const Type &v)
 Умножение с присваиванием с матрицей v.
void operator/= (const Type &v)
 Деление с присваиванием с матрицей v.
PIMathMatrix< Type > operator- () const
 Операция отрицания
PIMathMatrix< Type > operator+ (const PIMathMatrix< Type > &sm) const
 Матричное сложение.
PIMathMatrix< Type > operator- (const PIMathMatrix< Type > &sm) const
 Матричная разность.
PIMathMatrix< Type > operator* (const Type &v) const
 Матричное произведение.
PIMathMatrix< Type > operator/ (const Type &v) const
 Матричное деление.
Type determinant (bool *ok=0) const
 Вычислить определитель матрицы.
Type trace () const
 Вычислить след матрицы.
PIMathMatrix< Type > & toUpperTriangular (bool *ok=0)
 Преобразование матрицы в верхнетреугольную.
PIMathMatrix< Type > & invert (bool *ok=0, PIMathVector< Type > *sv=0)
 Операция обращения матрицы.
PIMathMatrix< Type > inverted (bool *ok=0) const
 Операция обращения матрицы.
PIMathMatrix< Type > transposed () const
 Транспонирование матрицы.
Открытые члены унаследованные от PIVector2D< Type >
 PIVector2D ()
 Создаёт пустой двумерный массив. Память не выделяется.
 PIVector2D (size_t rows, size_t cols, const Type &f=Type())
 Создаёт двумерный массив заданного размера, заполненный копиями f.
 PIVector2D (size_t rows, size_t cols, const PIVector< Type > &v)
 Создаёт двумерный массив из существующего одномерного вектора, изменяя его форму.
 PIVector2D (size_t rows, size_t cols, PIVector< Type > &&v)
 Конструктор перемещения из существующего одномерного вектора, изменяя его форму.
 PIVector2D (const PIVector< PIVector< Type > > &v)
 Создаёт двумерный массив из вектора векторов (рваного массива). Предполагается, что все внутренние векторы имеют одинаковый размер.
size_t rows () const
 Возвращает количество строк в двумерном массиве.
size_t cols () const
 Возвращает количество столбцов в двумерном массиве.
size_t size () const
 Возвращает общее количество элементов (строки * столбцы).
ssize_t size_s () const
 Возвращает общее количество элементов в виде знакового числа.
size_t length () const
 Возвращает общее количество элементов (то же, что и size()).
size_t capacity () const
 Возвращает количество элементов, для которого сейчас выделена память во внутреннем контейнере.
bool isEmpty () const
 Проверяет, пуст ли массив.
bool isNotEmpty () const
 Проверяет, не пуст ли массив.
Type & element (size_t row, size_t col)
 Возвращает ссылку на элемент по заданной строке и столбцу.
const Type & element (size_t row, size_t col) const
 Возвращает константную ссылку на элемент по заданной строке и столбцу.
const Type & at (size_t row, size_t col) const
 Возвращает константную ссылку на элемент по заданной строке и столбцу
Type & operator[] (const Index &idx)
 Возвращает ссылку на элемент по заданному Index.
const Type & operator[] (const Index &idx) const
 Возвращает константную ссылку на элемент по заданному Index.
Type & element (const Index &idx)
 Возвращает ссылку на элемент по заданному Index.
const Type & element (const Index &idx) const
 Возвращает константную ссылку на элемент по заданному Index.
const Type & at (const Index &idx) const
 Возвращает константную ссылку на элемент по заданному Index (проверка границ только в отладочном режиме).
Row operator[] (size_t index)
 Возвращает прокси-объект для строки по заданному индексу для модификации.
RowConst operator[] (size_t index) const
 Возвращает прокси-объект для строки по заданному индексу только для чтения.
Type * data (size_t index=0)
 Возвращает указатель на внутренние плоские данные, начиная с опционального смещения.
const Type * data (size_t index=0) const
 Возвращает константный указатель на внутренние плоские данные, начиная с опционального смещения.
Row row (size_t index)
 Возвращает прокси-объект для строки по заданному индексу для модификации.
RowConst row (size_t index) const
 Возвращает прокси-объект для строки по заданному индексу только для чтения.
Col col (size_t index)
 Возвращает прокси-объект для столбца по заданному индексу для модификации.
ColConst col (size_t index) const
 Возвращает прокси-объект для столбца по заданному индексу только для чтения.
PIVector2D< Type > & setRow (size_t row, const RowConst &other)
 Заменяет строку содержимым объекта RowConst только для чтения.
PIVector2D< Type > & setRow (size_t row, const PIVector< Type > &other)
 Заменяет строку содержимым PIVector.
PIVector2D< Type > & addRow (const RowConst &other)
 Добавляет новую строку в конец массива из другого объекта Row.
PIVector2D< Type > & addRow (const PIVector< Type > &other)
 Добавляет новую строку в конец массива из PIVector.
PIVector2D< Type > & appendRows (size_t count, const Type &f=Type())
 Добавляет count новых пустых строк в конец массива, заполненных значением f.
PIVector2D< Type > & appendColumns (size_t count, const Type &f=Type())
 Добавляет count новых пустых столбцов в конец каждой строки массива.
PIVector2D< Type > & deleteRows (size_t row_start, size_t count)
 Удаляет count строк, начиная с указанного индекса строки.
PIVector2D< Type > & deleteColumns (size_t col_start, size_t count)
 Удаляет указанные столбцы из массива и обновляет количество столбцов.
PIVector2D< Type > & addColumn (const ColConst &other)
 Добавляет новую строку в конец массива из ColConst.
PIVector2D< Type > & addColumn (const PIVector< Type > &other)
 Добавляет новую строку в конец массива из PIVector.
PIVector2D< Type > & resize (size_t rows, size_t cols, const Type &f=Type())
 Изменяет размер двумерного массива.
bool operator== (const PIVector2D< Type > &t) const
 Оператор равенства.
bool operator!= (const PIVector2D< Type > &t) const
 Оператор неравенства.
PIVector< PIVector< Type > > toVectors () const
 Преобразует двумерный массив в вектор векторов (PIVector<PIVector<T>>).
const PIVector< Type > & asPlainVector () const
 Возвращает константную ссылку на внутренний плоский PIVector.
PIVector< Type > & asPlainVector ()
 Возвращает ссылку на внутренний плоский PIVector.
PIVector< Type > toPlainVector () const
 Возвращает копию внутреннего плоского PIVector.
void swap (PIVector2D< Type > &other)
 Меняет местами этот двумерный массив с другим.
void clear ()
 Очищает массив, удаляя все элементы и устанавливая размеры в 0.
bool contains (const Type &e) const
 Проверяет, содержит ли внутренний плоский вектор элемент e.
int entries (const Type &e) const
 Подсчитывает количество вхождений e во внутреннем плоском векторе.
int entries (std::function< bool(const Type &e)> test) const
 Подсчитывает элементы в плоском векторе, проходящие test.
Index indexOf (const Type &e) const
 Возвращает первый индекс (строка, столбец) элемента e в двумерном массиве.
Index indexWhere (std::function< bool(const Type &e)> test, ssize_t start=0) const
 Возвращает первый индекс (строка, столбец) в двумерном массиве, проходящий test.
Index lastIndexOf (const Type &e, ssize_t start=-1) const
 Возвращает последний индекс (строка, столбец) элемента e в двумерном массиве.
Index lastIndexWhere (std::function< bool(const Type &e)> test, ssize_t start=-1) const
 Возвращает последний индекс (строка, столбец) в двумерном массиве, проходящий test.
bool any (std::function< bool(const Type &e)> test) const
 Проверяет, проходит ли какой-либо элемент в плоском векторе test.
bool every (std::function< bool(const Type &e)> test) const
 Проверяет, проходят ли все элементы в плоском векторе test.
PIVector2D< Type > & fill (const Type &e=Type())
 Заполняет весь двумерный массив копиями e.
PIVector2D< Type > & fill (std::function< Type(size_t i)> f)
 Заполняет весь двумерный массив, используя функцию-генератор f на основе плоского индекса.
PIVector2D< Type > & assign (const Type &e=Type())
 То же, что и fill().
PIVector2D< Type > & assign (size_t rows, size_t cols, const Type &f=Type())
 Задаёт новый размер и заполняет значением.
PIVector2D< Type > transposed () const
 Возвращает транспонированный двумерный массив (строки становятся столбцами и наоборот).
PIVector2D< Type > & reverseRows ()
 Изменяет порядок строк на обратный на месте.
PIVector2D< Type > & reverseColumns ()
 Изменяет порядок столбцов в каждой строке на обратный на месте.
PIVector2D< Type > getRange (size_t rowStart, size_t rowCount, size_t colStart, size_t colCount) const
 Возвращает подмассив (диапазон строк и столбцов).
void forEach (std::function< void(const Type &)> func) const
 Применяет функцию к каждому элементу (только чтение).
PIVector2D< Type > & forEach (std::function< void(Type &)> func)
 Применяет функцию к каждому элементу (с возможностью изменения).
PIVector2D< ST > map (std::function< ST(const Type &e)> f) const
 Применяет функцию к каждому элементу и возвращает новый двумерный массив другого типа.
PIVector2D< ST > mapIndexed (std::function< ST(size_t row, size_t col, const Type &e)> f) const
 Применяет функцию (с индексами строки и столбца) к каждому элементу и возвращает новый двумерный массив.
PIVector2D< Type > & forEachRow (std::function< void(Row)> f)
 Применяет функцию к каждой строке (с возможностью изменения).
void forEachRow (std::function< void(RowConst)> f) const
 Применяет функцию к каждой строке (только чтение).
PIVector2D< Type > & forEachColumn (std::function< void(Col)> f)
 Применяет функцию к каждому столбцу (с возможностью изменения).
void forEachColumn (std::function< void(ColConst)> f) const
 Применяет функцию к каждому столбцу (только чтение).
ST reduce (std::function< ST(const Type &e, const ST &acc)> f, const ST &initial=ST()) const
 Аккумулирует значение по всем элементам.
ST reduceIndexed (std::function< ST(size_t row, size_t col, const Type &e, const ST &acc)> f, const ST &initial=ST()) const
 Аккумулирует значение по всем элементам с индексами.
PIVector2D< Type > & removeRow (size_t row)
 Удаляет строку из двумерного массива.
PIVector2D< Type > & removeColumn (size_t col)
 Удаляет столбец из двумерного массива.
PIVector2D< Type > & removeRowsWhere (std::function< bool(const RowConst &)> test)
 Удаляет все строки, удовлетворяющие условию.
PIVector2D< Type > & removeColumnsWhere (std::function< bool(const ColConst &)> test)
 Удаляет все столбцы, удовлетворяющие условию.
PIVector2D< Type > filterRows (std::function< bool(const RowConst &)> test) const
 Возвращает новый двумерный массив, содержащий только строки, прошедшие проверку.
PIVector2D< Type > filterColumns (std::function< bool(const ColConst &)> test) const
 Возвращает новый двумерный массив, содержащий только столбцы, прошедшие проверку.

Открытые статические члены

static PIMathMatrix< Type > identity (const uint cols, const uint rows)
 Создает матрицу, главная диагональ которой заполнена, а оставшиеся элементы - нулями.
static PIMathMatrix< Type > matrixRow (const PIMathVector< Type > &val)
 Создает матрицу-строку, каждый элемент которой равен каждому элементу вектора
static PIMathMatrix< Type > matrixCol (const PIMathVector< Type > &val)
 Создает матрицу-столбец, каждый элемент которой равен каждому элементу вектора

Подробное описание

template<typename Type>
class PIMathMatrix< Type >

Математическая матрица динамического размера. Использует PIVector2D как хранилище и сохраняет интерфейс, согласованный с PIMathMatrixT.

Класс для работы с матрицами динамического размера и фиксированного типа.

Параметры шаблона
`Type`Здесь можеть быть базовый тип данных C++ или различные классы, где реализованы арифметические операторы(=, +=, -=, *=, /=, ==, !=, +, -, *, /) языка C++.

Конструктор(ы)

◆ PIMathMatrix() [1/4]

template<typename Type>
PIMathMatrix< Type >::PIMathMatrix ( const uint cols = 0,
const uint rows = 0,
const Type & f = Type() )
inline

Конструктор класса PIMathMatrix, который создает матрицу.

Аргументы
colsколичество столбов матрицы типа uint.
rowsколичество строк матрицы типа uint.
fтип элементов матрицы.

◆ PIMathMatrix() [2/4]

template<typename Type>
PIMathMatrix< Type >::PIMathMatrix ( const uint cols,
const uint rows,
const PIVector< Type > & val )
inline

Конструктор класса PIMathMatrix, который создает матрицу.

Аргументы
colsколичество столбов матрицы типа uint.
rowsколичество строк матрицы типа uint.
valтип PIVector<Type> элементов матрицы.

◆ PIMathMatrix() [3/4]

template<typename Type>
PIMathMatrix< Type >::PIMathMatrix ( const PIVector< PIVector< Type > > & val)
inline

Конструктор класса PIMathMatrix, который создает матрицу.

Аргументы
valтип PIVector<Type>, который создает матрицу.

◆ PIMathMatrix() [4/4]

template<typename Type>
PIMathMatrix< Type >::PIMathMatrix ( const PIVector2D< Type > & val)
inline

Конструктор класса PIMathMatrix, который создает матрицу.

Аргументы
valтип PIVector2D<Type>, который создает матрицу.

Методы

◆ identity()

template<typename Type>
PIMathMatrix< Type > PIMathMatrix< Type >::identity ( const uint cols,
const uint rows )
inlinestatic

Создает матрицу, главная диагональ которой заполнена, а оставшиеся элементы - нулями.

Аргументы
colsколичество столбов матрицы типа uint.
rowsколичество строк матрицы типа uint.
Возвращает
единичная матрица matrix(cols, rows)

◆ matrixRow()

template<typename Type>
PIMathMatrix< Type > PIMathMatrix< Type >::matrixRow ( const PIMathVector< Type > & val)
inlinestatic

Создает матрицу-строку, каждый элемент которой равен каждому элементу вектора

Аргументы
valвектор типа PIMathVector
Возвращает
матрица-строка, каждый элемент которой равен каждому элементу вектора

◆ matrixCol()

template<typename Type>
PIMathMatrix< Type > PIMathMatrix< Type >::matrixCol ( const PIMathVector< Type > & val)
inlinestatic

Создает матрицу-столбец, каждый элемент которой равен каждому элементу вектора

Аргументы
valвектор типа PIMathVector
Возвращает
матрица-столбец, каждый элемент которой равен каждому элементу вектора

◆ setCol()

template<typename Type>
PIMathMatrix< Type > & PIMathMatrix< Type >::setCol ( uint index,
const PIMathVector< Type > & v )
inline

Определить выбранный столбец матрицы.

Если элементов в векторе больше, чем элементов в столбце матрицы или индекс больше количества стобцов, то поведение не определено ("undefined behavior").

Аргументы
indexномер выбранного столбца.
vвектор типа PIMathVector<Type>, которым нужно заполнить столбец.
Возвращает
матрица типа PIMathMatrix<Type>.

◆ setRow()

template<typename Type>
PIMathMatrix< Type > & PIMathMatrix< Type >::setRow ( uint index,
const PIMathVector< Type > & v )
inline

Определить выбранную строку матрицы.

Если элементов в векторе больше, чем элементов в строке матрицы или индекс больше количества стобцов, то поведение не определено ("undefined behavior").

Аргументы
indexномер выбранной строки.
vвектор типа PIMathVector<Type>, которым нужно заполнить строку.
Возвращает
матрица типа PIMathMatrix<Type>.

◆ swapCols()

template<typename Type>
PIMathMatrix< Type > & PIMathMatrix< Type >::swapCols ( uint r0,
uint r1 )
inline

Метод меняющий местами выбранные строки в матрице.

Вы не можете использовать индекс, который больше количества столбцов, иначе будет неопределенное повередение ("undefined behavior").

Аргументы
r0номер первой выбранного стобца.
r1номер второй выбранного столбца.
Возвращает
матрица типа PIMathMatrix<Type>.

◆ swapRows()

template<typename Type>
PIMathMatrix< Type > & PIMathMatrix< Type >::swapRows ( uint c0,
uint c1 )
inline

Метод меняющий местами выбранные строки в матрице.

Вы не можете использовать индекс, который больше количества строк, иначе будет неопределенное повередение ("undefined behavior").

Аргументы
с0номер первой выбранной строки.
с1номер второй выбранной строки.
Возвращает
матрица типа PIMathMatrix<Type>.

◆ fill()

template<typename Type>
PIMathMatrix< Type > & PIMathMatrix< Type >::fill ( const Type & v)
inline

Метод заполняющий матрицу выбранным значением.

Аргументы
vпараметр выбранного типа и значения, которым будет заполнена матрица.
Возвращает
заполненная матрица типа PIMathMatrix<Type>.

◆ isSquare()

template<typename Type>
bool PIMathMatrix< Type >::isSquare ( ) const
inline

Метод, проверющий является ли матрица квадратной.

Возвращает
true если матрица квадратная, иначе false.

◆ isIdentity()

template<typename Type>
bool PIMathMatrix< Type >::isIdentity ( ) const
inline

Метод, проверяющий содержит ли главная диагональ единицы и все остальные поля нули.

Возвращает
true если матрица единичная, иначе false.
См. также
isNull(), isValid()

◆ isNull()

template<typename Type>
bool PIMathMatrix< Type >::isNull ( ) const
inline

Метод, являются ли все элементы матрицы нулями.

Возвращает
true если матрица нулевая, иначе false.
См. также
isIdentity()

◆ isValid()

template<typename Type>
bool PIMathMatrix< Type >::isValid ( ) const
inline

Метод, который проверяет является ли матрица пустой.

Возвращает
true если матрица действительна, иначе false.
См. также
isNull(), isIdentity()

◆ operator+=()

template<typename Type>
void PIMathMatrix< Type >::operator+= ( const PIMathMatrix< Type > & sm)
inline

Сложение с присваиванием с матрицей sm.

Аргументы
smматрица для сложения с присваиванием.

◆ operator-=()

template<typename Type>
void PIMathMatrix< Type >::operator-= ( const PIMathMatrix< Type > & sm)
inline

Вычитание с присваиванием с матрицей sm.

Аргументы
smматрица для вычитания с присваиванием.

◆ operator*=()

template<typename Type>
void PIMathMatrix< Type >::operator*= ( const Type & v)
inline

Умножение с присваиванием с матрицей v.

Аргументы
smматрица для умножения с присваиванием.

◆ operator/=()

template<typename Type>
void PIMathMatrix< Type >::operator/= ( const Type & v)
inline

Деление с присваиванием с матрицей v.

Аргументы
smматрица для деления с присваиванием.

◆ operator-() [1/2]

template<typename Type>
PIMathMatrix< Type > PIMathMatrix< Type >::operator- ( ) const
inline

Операция отрицания

Возвращает
копия отрицательной матрицы

◆ operator+()

template<typename Type>
PIMathMatrix< Type > PIMathMatrix< Type >::operator+ ( const PIMathMatrix< Type > & sm) const
inline

Матричное сложение.

Аргументы
smматричное слагаемое.
Возвращает
результат матричного сложения.

◆ operator-() [2/2]

template<typename Type>
PIMathMatrix< Type > PIMathMatrix< Type >::operator- ( const PIMathMatrix< Type > & sm) const
inline

Матричная разность.

Аргументы
smматричное вычитаемое.
Возвращает
результат матричной разности.

◆ operator*()

template<typename Type>
PIMathMatrix< Type > PIMathMatrix< Type >::operator* ( const Type & v) const
inline

Матричное произведение.

Аргументы
vмножитель.
Возвращает
результат произведения.

◆ operator/()

template<typename Type>
PIMathMatrix< Type > PIMathMatrix< Type >::operator/ ( const Type & v) const
inline

Матричное деление.

Аргументы
vделитель.
Возвращает
результат деления.

◆ determinant()

template<typename Type>
Type PIMathMatrix< Type >::determinant ( bool * ok = 0) const
inline

Вычислить определитель матрицы.

Работает только с квадратными, ненулевыми и обратимыми матрицами.

Аргументы
okэто параметр, с помощью которого мы можем узнать, правильно ли сработал метод.
Возвращает
опеределитель матрицы.

◆ trace()

template<typename Type>
Type PIMathMatrix< Type >::trace ( ) const
inline

Вычислить след матрицы.

Работает только с квадратными матрицами.

Возвращает
след матрицы.

◆ toUpperTriangular()

template<typename Type>
PIMathMatrix< Type > & PIMathMatrix< Type >::toUpperTriangular ( bool * ok = 0)
inline

Преобразование матрицы в верхнетреугольную.

Работает только с квадратными, ненулевыми и обратимыми матрицами.

Аргументы
okэто параметр, с помощью которого мы можем узнать, правильно ли сработал метод.
Возвращает
копия преобразованной верхнетреугольной матрицы.

◆ invert()

template<typename Type>
PIMathMatrix< Type > & PIMathMatrix< Type >::invert ( bool * ok = 0,
PIMathVector< Type > * sv = 0 )
inline

Операция обращения матрицы.

Работает только с квадратными, ненулевыми и обратимыми матрицами.

Аргументы
okэто параметр, с помощью которого мы можем узнать, правильно ли сработал метод.
Возвращает
обратная матрица.

◆ inverted()

template<typename Type>
PIMathMatrix< Type > PIMathMatrix< Type >::inverted ( bool * ok = 0) const
inline

Операция обращения матрицы.

Работает только с квадратными, ненулевыми и обратимыми матрицами.

Аргументы
okэто параметр, с помощью которого мы можем узнать, правильно ли сработал метод.
Возвращает
копия обратной матрицы.

◆ transposed()

template<typename Type>
PIMathMatrix< Type > PIMathMatrix< Type >::transposed ( ) const
inline

Транспонирование матрицы.

Работает только с квадратными матрицами.

Возвращает
копия транспонированной матрицы.