Write
Метод анализирует содержимое матрицы, определяет её структурный тип (симметричная, эрмитова, треугольная, ленточная и так далее) и записывает содержимое матрицы в открытый файл в соответствии с выбранным методом хранения.
long matrix::Write(
|
Параметры
file_handle
[in] Хендл файла, возвращаемый FileOpen().
storage_method
[in] Значение перечисления ENUM_BLAS_STORAGE, определяющее метод записи.
Возвращаемое значение
Возвращает количество байтов, записанных в файл. В случае ошибки возвращает -1.
Примечание
Запись производится с текущей позиции файла. Файл должен быть открыт как бинарный для записи (флаги FILE_BIN|FILE_WRITE). Сначала записывается структура MqlMatrixInfo, затем содержимое матрицы в соответствии с выбранным методом хранения. Матрица должна иметь ненулевой размер.
Если выбран метод BLASSTORAGE_GENERAL, то матрица сохраняется как есть.
Если выбран метод BLASSTORAGE_COMPACT, то матрица сохраняется наиболее компактно. Например, если было определено, что матрица является general band (GB), то вычисляется размер (kl+ku+1)*cols. Если этот размер меньше, чем rows*cols, то матрица записывается как general band, в противном случае матрица записывается как general (GE). Если в обычной матрице (GE) значительное количество нулей (info.nnz < info.rows*info.cols), то матрица может быть сохранена как разреженная в координатном формате "sparse COO". Размер хранимых данных при этом рассчитывается как info.nnz*sizeof(row_index) + info.nnz*sizeof(col_index) + nnz*sizeof(type). Если этот размер меньше, чем размер для хранения обычной матрицы, то матрица сохраняется как sparse, при этом класс матрицы info.matrix_class выставляется равным BLASTYPE_CO, и выставляется соответствующая сигнатура 'CO'.
Если выбран метод BLASSTORAGE_BAND и kl>=0 и ku>=0, то матрица записывается как band - general band (GB), symmetric band (SB), hermitian band (HB) или triangular band (TB).
При записи вектора в качестве storage_method принимаются значения BLASSTORAGE_GENERAL и BLASSTORAGE_COMPACT. В случае компактного хранения вектора рассчитывается размер по формуле info.nnz*sizeof(index) + info.nnz*sizeof(type). Если размер хранения sparse COO меньше размера size * sizeof(type), то вектор сохраняется как разреженный.
Перечисление, определяющее метод хранения матрицы.
ID |
Описание |
|---|---|
BLASSTORAGE_GENERAL |
Сохранение как есть |
BLASSTORAGE_COMPACT |
Компактное хранение |
BLASSTORAGE_BAND |
Ленточное хранение |