Класс, используемый для передачи входных/выходных аргументов функциям C++, сгенерированным SDK компилятора MATLAB
Используйте mwArray класс для передачи входных/выходных аргументов сгенерированным функциям интерфейса C++. Этот класс состоит из тонкой оболочки вокруг массива MATLAB ®. Все данные в MATLAB представлены массивами. mwArray класс предоставляет необходимые конструкторы, методы и операторы для создания и инициализации массива, а также простую индексацию.
Примечание
Арифметические операторы, такие как сложение и вычитание, больше не поддерживаются начиная с версии 14.
mclcppclass.h
mclmcrrt.h
Совет
Компилятор MATLAB SDK™ автоматически включает эти файлы заголовка в файл заголовка, созданный для функций MATLAB.
Построение пустого массива типа mxDOUBLE_CLASS.
Построение пустого массива указанного типа.
mxClassID mxID | Действительный mxClassID указание типа создаваемого массива. Дополнительные сведения см. в разделе Работа с mxArrays mxClassID. |
Создайте матрицу 2-D указанного типа и сложности. Для нечисловых типов: mxComplexity будет игнорироваться. Для числовых типов передайте mxCOMPLEX для последнего аргумента для создания комплексной матрицы; в противном случае матрица будет действительной. Все элементы инициализированы как нулевые. Для матриц ячеек все элементы инициализируются в пустые ячейки.
mwSize num_rows | Количество строк в массиве |
mwSize num_cols | Количество столбцов в массиве |
mxClassID mxID | Действительный mxClassID указание типа создаваемого массива. Дополнительные сведения см. в разделе Работа с mxArrays mxClassID. |
mxComplexity cmplx | Сложность создаваемого массива. Допустимые значения: mxREAL и mxCOMPLEX. Значение по умолчанию: mxREAL. |
Создание n-мерный массив указанного типа и сложности. Для нечисловых типов: mxComplexity будет игнорироваться. Для числовых типов передайте mxCOMPLEX для последнего аргумента для создания комплексной матрицы; в противном случае массив будет реальным. Все элементы инициализированы как нулевые. Для массивов ячеек все элементы инициализируются в пустые ячейки.
mwSize num_dims | Количество измерений в массиве |
const mwSize* dims | Размеры массива |
mxClassID mxID | Действительный mxClassID указание типа создаваемого массива. Дополнительные сведения см. в разделе Работа с mxArrays mxClassID. |
mxComplexity cmplx | Сложность создаваемого массива. Допустимые значения: mxREAL и mxCOMPLEX. Значение по умолчанию: mxREAL. |
Создание 1-по- массив типа nmxCHAR_CLASS, с n = strlen(str)и инициализируйте данные массива символами в указанной строке.
const char* str | Буфер символов со значением NULL, используемый для инициализации массива |
Создание матрицы типа mxCHAR_CLASSи инициализируйте данные массива символами в предоставленных строках. Созданный массив имеет размеры mоколо-max, где m - количество строк и max - длина самой длинной строки в str.
mwSize num_strings | Количество строк во входном массиве |
const char** str | Массив строк с нулевым окончанием |
Создание матрицы типа mxSTRUCT_CLASS, с указанными именами полей. Все элементы инициализируются пустыми ячейками.
mwSize num_rows | Количество строк в массиве |
mwSize num_cols | Количество столбцов в массиве |
int num_fields | Количество полей в struct матрица. |
const char** fieldnames | Массив пустых завершенных строк, представляющих имена полей |
Создание n-мерный массив типа mxSTRUCT_CLASS, с указанными именами полей. Все элементы инициализируются пустыми ячейками.
mwSize num_dims | Количество измерений в массиве |
const mwSize* dims | Размеры массива |
int num_fields | Количество полей в struct матрица. |
const char** fieldnames | Массив пустых завершенных строк, представляющих имена полей |
Создание глубокой копии существующего массива.
mwArray& arr | mwArray скопировать |
Создайте действительный скалярный массив.
Скалярный массив создается с типом входного аргумента.
<type> re | Скалярное значение для инициализации массива. <type> может быть любым из следующих:
|
Создайте сложный скалярный массив.
Скалярный массив создается с типом входного аргумента.
<type> re | Скалярное значение для инициализации действительной части массива |
<type> im | Скалярное значение для инициализации мнимой части массива |
<type> может быть любым из следующих:
mxDouble
mxSingle
mxInt8
mxUint8
mxInt16
mxUint16
mxInt32
mxUint32
mxInt64
mxUint64
mxLogical
Создайте новый массив, представляющий глубокую копию массива.
mwArray a(2, 2, mxDOUBLE_CLASS); mwArray b = a.Clone();
Создание общей копии существующего массива. Новый массив и исходный массив указывают на одни и те же данные.
mwArray a(2, 2, mxDOUBLE_CLASS); mwArray b = a.SharedCopy();
Сериализовать массив на байты. A 1-по-n числовая матрица типа mxUINT8_CLASS возвращается, содержащий сериализованные данные. Данные могут быть десериализованы обратно в исходное представление путем вызова mwArray::Deserialize().
mwArray a(2, 2, mxDOUBLE_CLASS); mwArray b = a.Serialize();
Определите тип массива. Дополнительные сведения см. в разделе Работа с mxArrays mxClassID.
mwArray a(2, 2, mxDOUBLE_CLASS); mxClassID id = a.ClassID();
Определите размер элемента типа массива в байтах. Если массив сложен, возвращаемое значение будет представлять размер в байтах действительной части элемента.
mwArray a(2, 2, mxDOUBLE_CLASS); int size = a.ElementSize();
Определите общий размер массива.
mwArray a(2, 2, mxDOUBLE_CLASS); int n = a.NumberOfElements();
Определите размер данных массива. Если базовый массив не разрежен, возвращается то же значение, что и NumberOfElements().
mwArray a(2, 2, mxDOUBLE_CLASS); int n = a.NumberOfNonZeros();
Определите выделенный размер данных массива. Если базовый массив не разрежен, возвращается то же значение, что и NumberOfElements().
mwArray a(2, 2, mxDOUBLE_CLASS); int n = a.MaximumNonZeros();
Определите размерность массива.
mwArray a(2, 2, mxDOUBLE_CLASS); int n = a.NumberOfDimensions();
Определение количества полей в struct массив. Если базовый массив не имеет типа struct, возвращается ноль.
const char* fields[] = {"a", "b", "c"};
mwArray a(2, 2, 3, fields);
int n = a.NumberOfFields();Определение имени данного поля в struct массив. Если базовый массив не имеет типа struct, создается исключение.
int index | Индекс поля для имени. Индексирование начинается с нуля. |
const char* fields[] = {"a", "b", "c"};
mwArray a(2, 2, 3, fields);
mwString tempname = a.GetFieldName(1);
const char* name = (const char*)tempname;Определите размер каждого измерения в массиве. Размер возвращаемого массива равен 1-by-NumberOfDimensions().
mwArray a(2, 2, mxDOUBLE_CLASS); mwArray dims = a.GetDimensions();
Определите, пуст ли массив.
mwArray a; bool b = a.IsEmpty();
Определите, является ли массив разреженным.
mwArray a(2, 2, mxDOUBLE_CLASS); bool b = a.IsSparse();
Определите, является ли массив числовым.
mwArray a(2, 2, mxDOUBLE_CLASS); bool b = a.IsNumeric();
Определите, является ли массив сложным.
mwArray a(2, 2, mxDOUBLE_CLASS, mxCOMPLEX); bool b = a.IsComplex();
Прибыль true если входной массив является байтовым, равным этому массиву. Этот метод выполняет побайтовое сравнение базовых массивов. Поэтому следует сравнивать массивы одного типа. Массивы разных типов в общем случае не будут равны, даже если они инициализированы одними и теми же данными.
mwArray& arr | Массив для сравнения с массивом. |
mwArray a(1, 1, mxDOUBLE_CLASS); mwArray b(1, 1, mxDOUBLE_CLASS); a = 1.0; b = 1.0; bool c = a.Equals(b);
Сравнивает этот массив с указанным массивом для порядка. Этот метод выполняет побайтовое сравнение базовых массивов. Поэтому следует сравнивать массивы одного типа. Массивы различных типов, как правило, не упорядочиваются эквивалентно, даже если они инициализированы одними и теми же данными.
mwArray& arr | Массив для сравнения с массивом. |
mwArray a(1, 1, mxDOUBLE_CLASS); mwArray b(1, 1, mxDOUBLE_CLASS); a = 1.0; b = 1.0; int n = a.CompareTo(b);
Создает уникальное значение хэша из базовых байтов в массиве. Поэтому массивы разных типов будут иметь разные хэш-коды, даже если они инициализированы одними и теми же данными.
mwArray a(1, 1, mxDOUBLE_CLASS); int n = a.HashCode();
Возвращает строковое представление базового массива. Возвращенная строка совпадает с той, которая возвращается путем ввода имени переменной в командной строке MATLAB.
mwArray a(1, 1, mxDOUBLE_CLASS, mxCOMPLEX);
a.Real() = 1.0;
a.Imag() = 2.0;
printf("%s\n", (const char*)(a.ToString()));Возвращает массив, представляющий индексы строк (первое измерение) элементов этого массива в порядке «» большой столбец «». Для разреженных массивов индексы возвращаются только для ненулевых элементов, а размер возвращаемого массива равен 1-by-NumberOfNonZeros(). Для массивов без синтаксического анализа размер возвращаемого массива равен 1-by-NumberOfElements()и возвращаются индексы строк всех элементов.
#include <stdio.h> mwArray a(1, 1, mxDOUBLE_CLASS); mwArray rows = a.RowIndex();
Возвращает массив, представляющий индексы столбцов (второе измерение) элементов этого массива в порядке «» большой столбец «». Для разреженных массивов индексы возвращаются только для ненулевых элементов, а размер возвращаемого массива равен 1-by-NumberOfNonZeros(). Для массивов без синтаксического анализа размер возвращаемого массива равен 1-by-NumberOfElements()и возвращаются индексы столбцов всех элементов.
mwArray a(1, 1, mxDOUBLE_CLASS); mwArray rows = a.ColumnIndex();
Преобразовать числовой массив, который ранее был выделен как real кому complex. Если базовый массив имеет нечисловой тип, mwException выбрасывается.
double rdata[4] = {1.0, 2.0, 3.0, 4.0};
double idata[4] = {10.0, 20.0, 30.0, 40.0};
mwArray a(2, 2, mxDOUBLE_CLASS);
a.SetData(rdata, 4);
a.MakeComplex();
a.Imag().SetData(idata, 4);Извлекает один элемент по заданному индексу. Количество индексов передается, за которым следует разделенный запятыми список индексов на основе 1. Допустимое число индексов, которые могут быть переданы, равно 1 (индексирование одного подстрочного индекса) или NumberOfDimensions() (индексирование нескольких подстрочных индексов). При индексировании одного подстрочного индекса возвращается элемент с указанным смещением на основе 1, получающий доступ к данным в основном порядке столбцов. При индексировании нескольких индексов индексный список используется для доступа к указанному элементу. Допустимый диапазон для индексов: 1 <= index <= NumberOfElements(), для индексации одного подстрочного индекса. Для индексирования нескольких подстрочных индексов th индекс имеет допустимый диапазон: i1 <= index[i] <= GetDimensions().Get(1, i). Один mwException выдается, если передано недопустимое число индексов или если какой-либо индекс выходит за границы.
mwSize num_indices | Количество переданных индексов |
... | Список входных индексов, разделенных запятыми. Количество элементов должно равняться num_indices но не должно превышать 32. |
double data[4] = {1.0, 2.0, 3.0, 4.0};
double x;
mwArray a(2, 2, mxDOUBLE_CLASS);
a.SetData(data, 4);
x = a.Get(1,1);
x = a.Get(2, 1, 2);
x = a.Get(2, 2, 2);Извлекает один элемент с указанным именем поля и индексом. Этот метод может быть вызван только для массива, который имеет тип mxSTRUCT_CLASS. Один mwException передается, если базовый массив не является struct массив. Переданное имя поля должно быть допустимым именем поля в struct массив. Индекс передается путем первого прохождения числа индексов, за которым следует разделенный запятыми список индексов на основе 1. Допустимое число индексов, которые могут быть переданы, равно 1 (индексирование одного подстрочного индекса) или NumberOfDimensions() (индексирование нескольких подстрочных индексов). При индексировании одного подстрочного индекса возвращается элемент с заданным смещением на основе 1, который обращается к данным в порядке столбцов. При индексировании нескольких индексов индексный список используется для доступа к указанному элементу. Допустимый диапазон для индексов: 1 <= index <= NumberOfElements(), для индексации одного подстрочного индекса. Для индексирования нескольких подстрочных индексов i-й индекс имеет допустимый диапазон: 1 <= index[i] <= GetDimensions().Get(1, i). Один mwException выдается, если передано недопустимое число индексов или если какой-либо индекс выходит за границы.
char* name | Буфер символов со значением NULL, содержащий имя поля |
mwSize num_indices | Количество переданных индексов |
... | Список входных индексов, разделенных запятыми. Количество элементов должно равняться num_indices но не должно превышать 32. |
const char* fields[] = {"a", "b", "c"};
mwArray a(1, 1, 3, fields);
mwArray b = a.Get("a", 1, 1);
mwArray b = a.Get("b", 2, 1, 1);Доступ к действительной части сложного массива. Возвращенный mwArray считается действительным и имеет ту же размерность и тип, что и оригинал.
Комплексные массивы состоят из комплексных чисел, которые являются векторами (парами) 1 на 2. Например, если номер 3+5i, то пара (3,5i). Поэтому массив комплексных чисел является двумерным (N-by-2), где N - число комплексных чисел в массиве. 2+4i, 7-3i, 8+6i будет представлен как (2,4i) (7,3i) (8,6i). Комплексные числа имеют две составляющие, вещественную и мнимую.
double rdata[4] = {1.0, 2.0, 3.0, 4.0};
double idata[4] = {10.0, 20.0, 30.0, 40.0};
mwArray a(2, 2, mxDOUBLE_CLASS, mxCOMPLEX);
a.Real().SetData(rdata, 4);Доступ к мнимой части сложного массива. Возвращенный mwArray считается действительным и имеет ту же размерность и тип, что и оригинал.
Комплексные массивы состоят из комплексных чисел, которые являются векторами (парами) 1 на 2. Например, если номер 3+5i, то пара (3,5i). Поэтому массив комплексных чисел является двумерным (N-by-2), где N - число комплексных чисел в массиве. 2+4i, 7-3i, 8+6i будет представлен как (2,4i) (7,3i) (8,6i). Комплексные числа имеют две составляющие, вещественную и мнимую.
double rdata[4] = {1.0, 2.0, 3.0, 4.0};
double idata[4] = {10.0, 20.0, 30.0, 40.0};
mwArray a(2, 2, mxDOUBLE_CLASS, mxCOMPLEX);
a.Imag().SetData(idata, 4);Назначение общей копии входного массива ячейке, на которую в данный момент имеется ссылка, для массивов типа mxCELL_CLASS и mxSTRUCT_CLASS.
mwArray& arr | mwArray назначение текущей ссылочной ячейке |
mwArray a(2, 2, mxDOUBLE_CLASS); mwArray b(2, 2, mxINT16_CLASS); mwArray c(1, 2, mxCELL_CLASS); c.Get(1,1).Set(a); c.Get(1,2).Set(b);
Копирует данные массива в предоставленный числовой буфер.
Данные копируются в основном порядке столбцов. Если базовый массив отличается от входного буфера, данные преобразуются в этот тип при копировании. Если преобразование не может быть выполнено, mwException выбрасывается.
<numeric-type>* buffer | Буфер для получения копии. допустимые типы для <numeric-type> являются:
|
mwSize len | Максимальная длина буфера. Максимум len элементы будут скопированы. |
double rdata[4] = {1.0, 2.0, 3.0, 4.0};
double data_copy[4] ;
mwArray a(2, 2, mxDOUBLE_CLASS);
a.SetData(rdata, 4);
a.GetData(data_copy, 4);
Копирует данные массива в mxLogical буфер.
Данные копируются в основном порядке столбцов. Если базовый массив не имеет типа mxLOGICAL_CLASSданные преобразуются в этот тип при копировании. Если преобразование не может быть выполнено, mwException выбрасывается.
mxLogical* buffer | Буфер для получения копии |
mwSize len | Максимальная длина буфера. Максимум len элементы будут скопированы. |
mxLogical data[4] = {true, false, true, false};
mxLogical data_copy[4] ;
mwArray a(2, 2, mxLOGICAL_CLASS);
a.SetLogicalData(data, 4);
a.GetLogicalData(data_copy, 4);Копирует данные массива в mxChar буфер.
Данные копируются в основном порядке столбцов. Если базовый массив не имеет типа mxCHAR_CLASSданные преобразуются в этот тип при копировании. Если преобразование не может быть выполнено, mwException выбрасывается.
mxChar** buffer | Буфер для получения копии |
mwSize len | Максимальная длина буфера. Максимум len элементы будут скопированы. |
mxChar data[6] = {'H', 'e' , `l' , 'l' , 'o' , '\0'};
mxChar data_copy[6] ;
mwArray a(1, 6, mxCHAR_CLASS);
a.SetCharData(data, 6);
a.GetCharData(data_copy, 6);Копирует данные из предоставленного числового буфера в массив.
Данные копируются в основном порядке столбцов. Если базовый массив отличается от входного буфера, данные преобразуются в этот тип при копировании. Если преобразование не может быть выполнено, mwException выбрасывается.
Вы не можете использовать SetData для динамического изменения размера mwArray.
<numeric-type>* buffer | Буфер, содержащий копируемые данные. Допустимые типы для <numeric-type> являются:
|
mwSize len | Максимальная длина буфера. Максимум len элементы будут скопированы. |
double rdata[4] = {1.0, 2.0, 3.0, 4.0};
double data_copy[4] ;
mwArray a(2, 2, mxDOUBLE_CLASS);
a.SetData(rdata, 4);
a.GetData(data_copy, 4);
Копирует данные из предоставленного mxLogical буфер в массив.
Данные копируются в основном порядке столбцов. Если базовый массив не имеет типа mxLOGICAL_CLASSданные преобразуются в этот тип при копировании. Если преобразование не может быть выполнено, mwException выбрасывается.
mxLogical* buffer | Буфер, содержащий данные для копирования |
mwSize len | Максимальная длина буфера. Максимум len элементы будут скопированы. |
mxLogical data[4] = {true, false, true, false};
mxLogical data_copy[4] ;
mwArray a(2, 2, mxLOGICAL_CLASS);
a.SetLogicalData(data, 4);
a.GetLogicalData(data_copy, 4);Копирует данные из предоставленного mxChar буфер в массив.
Данные копируются в основном порядке столбцов. Если базовый массив не имеет типа mxCHAR_CLASSданные преобразуются в этот тип при копировании. Если преобразование не может быть выполнено, mwException выбрасывается.
mxChar** buffer | Буфер, содержащий данные для копирования |
mwSize len | Максимальная длина буфера. Максимум len элементы будут скопированы. |
mxChar data[6] = {'H', 'e' , `l' , 'l' , 'o' , '\0'};
mxChar data_copy[6] ;
mwArray a(1, 6, mxCHAR_CLASS);
a.SetCharData(data, 6);
a.GetCharData(data_copy, 6);Десериализация массива, сериализованного с помощью mwArray::Serialize(). Входной массив должен иметь тип mxUINT8_CLASS и содержат данные из сериализованного массива. Если входные данные не представляют сериализованную mwArray, поведение этого метода не определено.
mwArray& arr | mwArray которая была получена путем вызова mwArray::Serialize |
double rdata[4] = {1.0, 2.0, 3.0, 4.0};
mwArray a(1,4,mxDOUBLE_CLASS);
a.SetData(rdata, 4);
mwArray b = a.Serialize();
a = mwArray::Deserialize(b);Создание вещественной разреженной матрицы типа double с указанным количеством строк и столбцов.
Длины входных строк, индексов столбцов и массивов данных должны быть одинаковыми или равными 1. В случае, когда любой из этих массивов равен 1, значение повторяется во время построения матрицы.
Если одна и та же пара строка/столбец встречается более одного раза, значение данных, присвоенное этому элементу, является суммой всех значений, связанных с этой парой. Если какой-либо элемент rowindex или colindex массив больше указанных значений в num_rows или num_cols соответственно, создается исключение.
mwSize rowindex_size | Размер rowindex множество |
mwIndex* rowindex | Массив индексов строк ненулевых элементов |
mwSize colindex_size | Размер colindex множество |
mwIndex* colindex | Массив индексов столбцов ненулевых элементов |
mwSize data_size | Размер массива данных |
mxDouble* rdata | Данные, связанные с ненулевыми индексами строк и столбцов |
mwSize num_rows | Количество строк в матрице |
mwSize num_cols | Количество столбцов в матрице |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы. Если nzmax равно нулю, для хранилища будет установлено значение max{rowindex_size, colindex_size, data_size}. |
Этот пример конструирует разреженную тридиагональную матрицу 4 на 4:
2 -1 0 0 -1 2 -1 0 0 -1 2 -1 0 0 -1 2
Следующий код при выполнении:
double rdata[] =
{2.0, -1.0, -1.0, 2.0, -1.0,
-1.0, 2.0, -1.0, -1.0, 2.0};
mwIndex row_tridiag[] =
{1, 2, 1, 2, 3,
2, 3, 4, 3, 4 };
mwIndex col_tridiag[] =
{1, 1, 2, 2, 2,
3, 3, 3, 4, 4 };
mwArray mysparse =
mwArray::NewSparse(10, row_tridiag,
10, col_tridiag,
10, rdata, 4, 4, 10);
std::cout << mysparse << std::endl;выведет на экран следующие выходные данные:
(1,1) 2 (2,1) -1 (1,2) -1 (2,2) 2 (3,2) -1 (2,3) -1 (3,3) 2 (4,3) -1 (3,4) -1 (4,4) 2
Создание вещественной разреженной матрицы типа double с количеством строк и столбцов, выведенных из входных данных.
Длины входных строк и столбцов индекса и массивов данных должны быть одинаковыми или равными 1. В случае, когда любой из этих массивов равен 1, значение повторяется через структуру матрицы.
Если одна и та же пара строка/столбец встречается более одного раза, значение данных, присвоенное этому элементу, является суммой всех значений, связанных с этой парой. Количество строк и столбцов в созданной матрице рассчитывается на основе входных данных rowindex и colindex массивы как num_rows = max{rowindex}, num_cols = max{colindex}.
mwSize rowindex_size | Размер rowindex множество |
mwIndex* rowindex | Массив индексов строк ненулевых элементов |
mwSize colindex_size | Размер colindex множество |
mwIndex* colindex | Массив индексов столбцов ненулевых элементов |
mwSize data_size | Размер массива данных |
mxDouble* rdata | Данные, связанные с ненулевыми индексами строк и столбцов |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы. Если nzmax равно нулю, для хранилища будет установлено значение max{rowindex_size, colindex_size, data_size}. |
В этом примере мы построим разреженную единичную матрицу 4 на 4. Значение 1,0 копируется в каждый ненулевой элемент, определенный массивами индексов строк и столбцов:
double one = 1.0;
mwIndex row_diag[] = {1, 2, 3, 4};
mwIndex col_diag[] = {1, 2, 3, 4};
mwArray mysparse =
mwArray::NewSparse(4, row_diag,
4, col_diag,
1, &one,
0);
std::cout << mysparse << std::endl;
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
Создание сложной разреженной матрицы типа double с указанным количеством строк и столбцов.
Длины входных строк и столбцов индекса и массивов данных должны быть одинаковыми или равными 1. В случае, когда любой из этих массивов равен 1, значение повторяется через структуру матрицы.
Если одна и та же пара строка/столбец встречается более одного раза, значение данных, присвоенное этому элементу, является суммой всех значений, связанных с этой парой. Если какой-либо элемент rowindex или colindex массив больше указанных значений в num_rows, num_cols, соответственно, затем генерируется исключение.
mwSize rowindex_size | Размер rowindex множество |
mwIndex* rowindex | Массив индексов строк ненулевых элементов |
mwSize colindex_size | Размер colindex множество |
mwIndex* colindex | Массив индексов столбцов ненулевых элементов |
mwSize data_size | Размер массива данных |
mxDouble* rdata | Реальная часть данных, связанных с ненулевыми индексами строк и столбцов |
mxDouble* idata | Мнимая часть данных, связанных с ненулевыми индексами строк и столбцов |
mwSize num_rows | Количество строк в матрице |
mwSize num_cols | Количество столбцов в матрице |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы. Если nzmax равно нулю, для хранилища будет установлено значение max{rowindex_size, colindex_size, data_size}. |
Этот пример конструирует сложную тридиагональную матрицу:
double rdata[] =
{2.0, -1.0, -1.0, 2.0, -1.0, -1.0, 2.0, -1.0, -1.0, 2.0};
double idata[] =
{20.0, -10.0, -10.0, 20.0, -10.0, -10.0, 20.0, -10.0,
-10.0, 20.0};
mwIndex row_tridiag[] =
{1, 2, 1, 2, 3, 2, 3, 4, 3, 4};
mwIndex col_tridiag[] =
{1, 1, 2, 2, 2, 3, 3, 3, 4, 4};
mwArray mysparse = mwArray::NewSparse(10, row_tridiag,
10, col_tridiag,
10, rdata,
idata, 4, 4, 10);
std::cout << mysparse << std::endl;
На экране отображаются следующие выходные данные:
(1,1) 2.0000 +20.0000i (2,1) -1.0000 -10.0000i (1,2) -1.0000 -10.0000i (2,2) 2.0000 +20.0000i (3,2) -1.0000 -10.0000i (2,3) -1.0000 -10.0000i (3,3) 2.0000 +20.0000i (4,3) -1.0000 -10.0000i (3,4) -1.0000 -10.0000i (4,4) 2.0000 +20.0000i
Создание сложной разреженной матрицы типа double с количеством строк и столбцов, выведенных из входных данных.
Длины входных строк и столбцов индекса и массивов данных должны быть одинаковыми или равными 1. В случае, когда любой из этих массивов равен 1, значение повторяется через структуру матрицы.
Если одна и та же пара строка/столбец встречается более одного раза, значение данных, присвоенное этому элементу, является суммой всех значений, связанных с этой парой. Количество строк и столбцов в созданной матрице вычисляется при вводе rowindex и colindex массивы как num_rows = max{rowindex}, num_cols = max{colindex}.
mwSize rowindex_size | Размер rowindex множество |
mwIndex* rowindex | Массив индексов строк ненулевых элементов |
mwSize colindex_size | Размер colindex множество |
mwIndex* colindex | Массив индексов столбцов ненулевых элементов |
mwSize data_size | Размер массива данных |
mxDouble* rdata | Реальная часть данных, связанных с ненулевыми индексами строк и столбцов |
mxDouble* idata | Мнимая часть данных, связанных с ненулевыми индексами строк и столбцов |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы. Если nzmax равно нулю, для хранилища будет установлено значение max{rowindex_size, colindex_size, data_size}. |
В этом примере создается комплексная матрица путем вывода размеров и распределения памяти из входных данных.
mwArray mysparse =
mwArray::NewSparse(10, row_tridiag,
10, col_tridiag,
10, rdata, idata,
0);
std::cout << mysparse << std::endl;
(1,1) 2.0000 +20.0000i
(2,1) -1.0000 -10.0000i
(1,2) -1.0000 -10.0000i
(2,2) 2.0000 +20.0000i
(3,2) -1.0000 -10.0000i
(2,3) -1.0000 -10.0000i
(3,3) 2.0000 +20.0000i
(4,3) -1.0000 -10.0000i
(3,4) -1.0000 -10.0000i
(4,4) 2.0000 +20.0000i
Создание логической разреженной матрицы с указанным количеством строк и столбцов.
Длины входных строк и столбцов индекса и массивов данных должны быть одинаковыми или равными 1. В случае, когда любой из этих массивов равен 1, значение повторяется во время построения матрицы.
Если одна и та же пара строка/столбец встречается более одного раза, значение данных, присвоенное этому элементу, является суммой всех значений, связанных с этой парой. Если какой-либо элемент rowindex или colindex массив больше указанных значений в num_rows, num_cols, соответственно, затем генерируется исключение.
mwSize rowindex_size | Размер rowindex множество |
mwIndex* rowindex | Массив индексов строк ненулевых элементов |
mwSize colindex_size | Размер colindex множество |
mwIndex* colindex | Массив индексов столбцов ненулевых элементов |
mwSize data_size | Размер массива данных |
mxLogical* rdata | Данные, связанные с ненулевыми индексами строк и столбцов |
mwSize num_rows | Количество строк в матрице |
mwSize num_cols | Количество столбцов в матрице |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы. Если nzmax равно нулю, для хранилища будет установлено значение max{rowindex_size, colindex_size, data_size}. |
В этом примере создается разреженная логическая тридиагональная матрица 4 на 4, присваивающая true к каждому ненулевому значению:
mxLogical one = true;
mwIndex row_tridiag[] =
{1, 2, 1, 2, 3,
2, 3, 4, 3, 4};
mwIndex col_tridiag[] =
{1, 1, 2, 2, 2,
3, 3, 3, 4, 4};
mwArray mysparse =
mwArray::NewSparse(10, row_tridiag,
10, col_tridiag,
1, &one,
4, 4, 10);
std::cout << mysparse << std::endl;
(1,1) 1
(2,1) 1
(1,2) 1
(2,2) 1
(3,2) 1
(2,3) 1
(3,3) 1
(4,3) 1
(3,4) 1
(4,4) 1
Создает логическую разреженную матрицу с количеством строк и столбцов, выведенных из входных данных.
Длины входных строк и столбцов индекса и массивов данных должны быть одинаковыми или равными 1. В случае, когда любой из этих массивов равен 1, значение повторяется через структуру матрицы.
Количество строк и столбцов в созданной матрице вычисляется при вводе rowindex и colindex массивы как num_rows = max {rowindex}, num_cols = max {colindex}.
mwSize rowindex_size | Размер rowindex множество |
mwIndex* rowindex | Массив индексов строк ненулевых элементов |
mwSize colindex_size | Размер colindex множество |
mwIndex* colindex | Массив индексов столбцов ненулевых элементов |
mwSize data_size | Размер массива данных |
mxLogical* rdata | Данные, связанные с ненулевыми индексами строк и столбцов |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы. Если nzmax равно нулю, для хранилища будет установлено значение max{rowindex_size, colindex_size, data_size}. |
В этом примере используются данные из первого примера, но на основе входных данных можно рассчитать количество строк, количество столбцов и выделенное хранилище:
mwArray mysparse =
mwArray::NewSparse(10, row_tridiag,
10, col_tridiag,
1, &one,
0);
std::cout << mysparse << std::endl;
(1,1) 1
(2,1) 1
(1,2) 1
(2,2) 1
(3,2) 1
(2,3) 1
(3,3) 1
(4,3) 1
(3,4) 1
(4,4) 1Создание пустой разреженной матрицы. Все элементы в пустой разреженной матрице изначально равны нулю, и объем выделенного хранилища для ненулевых элементов определяется nzmax.
mwSize num_rows | Количество строк в матрице |
mwSize num_cols | Количество столбцов в матрице |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы |
mxClassID mxID | Тип данных для хранения в матрице. В настоящее время разреженные матрицы типа double точность и logical поддерживаются. Проход mxDOUBLE_CLASS для создания double прецизионная разреженная матрица. Проход mxLOGICAL_CLASS для создания logical разреженная матрица. |
mxComplexity cmplx | Сложность матрицы. Проход mxCOMPLEX для создания complex разреженная матрица и mxREAL для создания real разреженная матрица. Этот аргумент может быть опущен, в этом случае сложность по умолчанию real |
В этом примере создается действительная пустая разреженная матрица типа 3 на 3 double с зарезервированным хранилищем для 4 ненулевых элементов:
mwArray mysparse = mwArray::NewSparse
(3, 3, 4, mxDOUBLE_CLASS);
std::cout << mysparse << std::endl;
All zero sparse: 3-by-3
Получить значение NaN (Не-а-число).
Звонить mwArray::GetNaN для возврата значения NaN для вашей системы. NaN - арифметическое представление IEEE для Not-a-Number. Некоторые математические операции возвращаются NaN в результате, например:
0.0/0.0
Inf-Inf
Значение NaN встроена в систему; изменить его нельзя.
double x = mwArray::GetNaN();
Возвращает значение MATLAB eps переменная. Эта переменная представляет собой расстояние от 1,0 до следующего наибольшего числа с плавающей запятой. Следовательно, это мера точности с плавающей запятой. MATLAB pinv и rank использование функций eps в качестве допуска по умолчанию.
double x = mwArray::GetEps();
Возвращает значение внутренней переменной MATLAB Inf переменная. Inf - постоянная переменная, представляющая арифметическую положительную бесконечность IEEE. Значение Inf встроен в систему; изменить его нельзя.
Операции, которые возвращаются Inf включать
Деление на 0. Например, 5/0 возвращает Inf.
Операции, приводящие к переполнению. Например, exp(10000) прибыль Inf потому что результат слишком велик для представления на компьютере.
double x = mwArray::GetInf();
Определите, является ли значение конечным. Число является конечным, если оно больше -Inf и менее Inf.
double x | Значение для проверки на конечность |
bool x = mwArray::IsFinite(1.0);
Определяет, равно ли значение бесконечности или минус бесконечности. MATLAB сохраняет значение бесконечности в постоянной переменной с именем Inf, которая представляет арифметическую положительную бесконечность IEEE. Значение переменной, Inf, встроен в систему; изменить его нельзя.
Операции, возвращающие бесконечность, включают
Деление на 0. Например, 5/0 возвращает бесконечность.
Операции, приводящие к переполнению. Например, exp(10000) возвращает бесконечность, поскольку результат слишком велик для представления на компьютере. Если значение равно NaN (Не-а-число), то mxIsInf прибыль false. Другими словами, NaN не равно бесконечности.
double x | Ценность для проверки на бесконечность |
bool x = mwArray::IsInf(1.0);
Определяет, является ли значение NaN. NaN - арифметическое представление IEEE для Not-a-Number. NaN получается в результате математически неопределенных операций, таких как
0.0/0.0
Inf-Inf
Система понимает семейство битовых шаблонов как представляющие NaN. Другими словами, NaN это не одно значение, а семейство чисел, которые программное обеспечение MATLAB (и другие приложения, совместимые с IEEE) использует для представления состояния ошибки или отсутствующих данных.
double x | Значение для проверки NaN |
bool x = mwArray::IsNaN(1.0);
Извлекает один элемент по заданному индексу. Индекс передается в виде разделенного запятыми списка индексов на основе 1. Этот оператор перегружен для поддержки индексов от 1 до 32. Допустимое число индексов, которые могут быть переданы, равно 1 (индексирование одного подстрочного индекса) или NumberOfDimensions() (индексирование нескольких подстрочных индексов). При индексировании одного подстрочного индекса возвращается элемент с заданным смещением на основе 1, который обращается к данным в порядке столбцов. При индексировании нескольких индексов индексный список используется для доступа к указанному элементу. Допустимый диапазон для индексов: 1 <= index <= NumberOfElements(), для индексации одного подстрочного индекса. Для индексирования нескольких подстрочных индексов i-й индекс имеет допустимый диапазон: 1 <= index[i] <= GetDimensions().Get(1, i). Один mwException выдается, если передано недопустимое число индексов или если какой-либо индекс выходит за границы.
mwIndex i1, mwIndex i2, mwIndex i3, ..., | Список входных индексов, разделенных запятыми |
double data[4] = {1.0, 2.0, 3.0, 4.0};
double x;
mwArray a(2, 2, mxDOUBLE_CLASS);
a.SetData(data, 4);
x = a(1,1);
x = a(1,2);
x = a(2,2);Извлекает один элемент с указанным именем поля и индексом. Этот метод может быть вызван только для массива, который имеет тип mxSTRUCT_CLASS. Один mwException передается, если базовый массив не является struct массив. Переданное имя поля должно быть допустимым именем поля в struct массив. Индекс передается путем первого прохождения числа индексов, за которым следует массив индексов на основе 1. Этот оператор перегружен для поддержки индексов от 1 до 32. Допустимое число индексов, которые могут быть переданы, равно 1 (индексирование одного подстрочного индекса) или NumberOfDimensions() (индексирование нескольких подстрочных индексов). При индексировании одного подстрочного индекса возвращается элемент с заданным смещением на основе 1, который обращается к данным в порядке столбцов. При индексировании нескольких индексов индексный список используется для доступа к указанному элементу. Допустимый диапазон для индексов: 1 <= index <= NumberOfElements(), для индексации одного подстрочного индекса. Для индексирования нескольких подстрочных индексов i-й индекс имеет допустимый диапазон: 1 <= index[i] <= GetDimensions().Get(1, i). Один mwException выдается, если передано недопустимое число индексов или если какой-либо индекс выходит за границы.
char* name | Пустая завершенная строка, содержащая имя поля для получения |
mwIndex i1, mwIndex i2, mwIndex i3, ..., | Список входных индексов, разделенных запятыми |
const char* fields[] = {"a", "b", "c"};
int index[2] = {1, 1};
mwArray a(1, 1, 3, fields);
mwArray b = a("a", 1, 1);
mwArray b = a("b", 1, 1);Задает одно скалярное значение. Этот оператор перегружен для всех числовых и логических типов.
const <type>& x | Присваиваемое значение |
mwArray a(2, 2, mxDOUBLE_CLASS); a(1,1) = 1.0; a(1,2) = 2.0; a(2,1) = 3.0; a(2,2) = 4.0;
Извлекает одно скалярное значение. Этот оператор перегружен для всех числовых и логических типов.
mwIndex i1, mwIndex i2, mwIndex i3, ..., | Список входных индексов, разделенных запятыми |
double data[4] = {1.0, 2.0, 3.0, 4.0};
double x;
mwArray a(2, 2, mxDOUBLE_CLASS);
a.SetData(data, 4);
x = (double)a(1,1);
x = (double)a(1,2);
x = (double)a(2,1);
x = (double)a(2,2);Написать mwArray для вывода потока. Выходные данные имеют тот же формат, что и выходные данные при вводе имени переменной в командной строке MATLAB. Посмотрите ToString().