Создайте карту распределения памяти к файлу
m = memmapfile(filename)m = memmapfile(filename,Name,Value)сопоставляет существующий файл, m = memmapfile(filename) filename, к памяти и возвращает карту распределения памяти, m.
Размещение в ОЗУ является механизмом, который сопоставляет фрагмент файла или целого файла, на диске к области значений адресов памяти в адресном пространстве MATLAB®. Затем MATLAB может получить доступ к файлам на диске таким же образом, это получает доступ к динамической памяти, ускоряя чтение файла и запись. Размещение в ОЗУ позволяет вам работать с данными в файле, как будто это был массив MATLAB.
задает свойства m = memmapfile(filename,Name,Value) m с помощью одного или нескольких аргументов в виде пар "имя-значение". Например, можно задать формат данных в файле.
Отображение Целого Файла uint8 ДанныхВ командной строке создайте файл примера в своей текущей папке под названием records.dat, содержа 10 значений uint8.
myData = uint8(1:10)'; fileID = fopen('records.dat','w'); fwrite(fileID, myData,'uint8'); fclose(fileID);
Создайте карту для records.dat. При использовании memmapfile форматом данных по умолчанию является uint8, таким образом, имя файла является единственным необходимым входным параметром в этом случае.
m = memmapfile('records.dat')m =
Filename: 'd:\matlab\records.dat'
Writable: false
Offset: 0
Format: 'uint8'
Repeat: Inf
Data: 10x1 uint8 arrayMATLAB сопоставляет целый файл records.dat с памятью, устанавливая все свойства карты распределения памяти к их значениям по умолчанию. Карта распределения памяти присвоена переменной, m. В этом примере команда сопоставляет целый файл как последовательность 8-битных целых чисел без знака и дает доступ только для чтения вызывающей стороны к его содержимому.
Просмотрите сопоставленные данные путем доступа к свойству Data m.
m.Data
ans =
1
2
3
4
5
6
7
8
9
10Создайте карту распределения памяти для с двойной точностью данных. Синтаксис подобен при определении других типов данных.
В командной строке создайте файл примера в своей текущей папке под названием records.dat, содержа 10 значений double.
myData = (1:10)'; fileID = fopen('records.dat','w'); fwrite(fileID,myData,'double'); fclose(fileID);
Создайте карту распределения памяти для records.dat и установите свойство Format для вывода к 'double'.
m = memmapfile('records.dat','Format','double') ;
memmapfile, m, содержит следующие свойства: Filename, Writable, Offset, Format, Repeat и Data. Отобразить любое свойство, например Format, m.Format типа в командном окне.
m.Format
ans = 'double'
Свойство Data содержит 10 с двойной точностью значения в records.dat.
Создайте карту распределения памяти для большого массива данных int32. Задайте доступ для записи, и Format не по умолчанию и значения Offset.
В командной строке создайте файл примера в своей текущей папке под названием records.dat, содержа 10 000 значений int32.
myData = int32([1:10000]); fileID = fopen('records.dat','w'); fwrite(fileID,myData,'int32'); fclose(fileID);
Создайте карту распределения памяти для records.dat и установите свойство Format для вывода к int32. Кроме того, установите свойство Offset игнорировать первые 9 000 байтов в файле и свойство Writable разрешить доступ для записи.
m = memmapfile('records.dat',... 'Offset',9000,... 'Format','int32',... 'Writable',true);
Значение Offset 9000 указывает, что первые 9 000 байтов records.dat не сопоставлены.
Введите имя карты распределения памяти, чтобы видеть текущие настройки для всех свойств.
m
m =
Filename: 'd:\matlab\records.dat'
Writable: true
Offset: 9000
Format: 'int32'
Repeat: Inf
Data: 7750x1 int32 arrayСвойство Format указывает, что любая операция чтения или операция записи, сделанная с помощью карты распределения памяти, читают и пишут содержимое файла как последовательность 32-битных целых чисел со знаком. Свойство Data содержит только 7 750 элементов, потому что первые 9 000 байтов records.dat, представляя первые 2 250 значений в файле, не сопоставлены.
Просмотрите первые пять элементов сопоставленных данных путем доступа к свойству Data m.
m.Data(1:5)
ans =
2251
2252
2253
2254
2255Создайте карту распределения памяти для области файла, содержащего 100 с двойной точностью значения.
В командной строке создайте файл примера в своей текущей папке под названием mybinary.bin, содержа 100 с двойной точностью значения.
randData = gallery('uniformdata',[100,1],0,'double'); fileID = fopen('mybinary.bin','w'); fwrite(fileID,randData,'double'); fclose(fileID);
Сопоставьте первые 75 значений в mybinary.bin к 5 5 3 массивами с двойной точностью значений, на которые можно сослаться в структуре карты распределения памяти с помощью имени поля x. Задайте эти параметры с аргументом в виде пар "имя-значение" Format.
m = memmapfile('mybinary.bin',... 'Format',{'double',[5 5 3],'x'})
m =
Filename: 'd:\matlab\mybinary.bin'
Writable: false
Offset: 0
Format: {'double' [5 5 3] 'x'}
Repeat: Inf
Data: 1x1 struct array with fields:
xСвойство Data является массивом структур, который содержит сопоставленные значения в поле, x.
Присвойте сопоставленные данные переменной, A. Поскольку свойство Data является массивом структур, необходимо индексировать в поле, x, чтобы получить доступ к данным.
A = m.Data.x;
Просмотрите информацию о A.
whos AName Size Bytes Class Attributes A 5x5x3 600 double
Сопоставьте сегменты файла с различными формами массивов и типами данных к памяти.
В командной строке создайте файл примера в своей текущей папке под названием mybinary.bin. Запишите данные uint16 и с двойной точностью данные, представляющие демонстрационное давление, температуру и значения объема в файл. В этом случае, каждый из массивов uint16 50 1 и с двойной точностью, массивы 5 10. k является демонстрационным масштабным коэффициентом.
k = 8.21; [pres1,temp1] = gallery('integerdata',[1,300],[50,1],0,'uint16'); vol1 = double(reshape(k*temp1./pres1,5,10)); [pres2,temp2] = gallery('integerdata',[5,500],[50,1],5,'uint16'); vol2 = double(reshape(k*temp2./pres2,5,10)); fileID = fopen('mybinary.bin','w'); fwrite(fileID,pres1,'uint16'); fwrite(fileID,temp1,'uint16'); fwrite(fileID,vol1,'double'); fwrite(fileID,pres2,'uint16'); fwrite(fileID,temp2,'uint16'); fwrite(fileID,vol2,'double'); fclose(fileID);
Сопоставьте файл с массивами, доступными уникальными именами. Задайте поле, pressure, содержа 50 1 массив значений uint16, сопровождаемых полем, temperature, содержа 50 1 значения uint16. Задайте поле, volume, содержа 5 10 массив с двойной точностью значений. Используйте массив ячеек, чтобы задать формат сопоставленной области и повторить шаблон дважды.
m = memmapfile('mybinary.bin',... 'Format',{'uint16',[50 1],'pressure';... 'uint16',[50,1],'temperature';... 'double',[5,10],'volume'},'Repeat',2)
m =
Filename: 'd:\matlab\mybinary.bin'
Writable: false
Offset: 0
Format: {'uint16' [50 1] 'pressure'
'uint16' [50 1] 'temperature'
'double' [5 10] 'volume'}
Repeat: 2
Data: 2x1 struct array with fields:
pressure
temperature
volumeСвойство Data карты распределения памяти, m, 2 1 массив структур, потому что Format применяется дважды.
Скопируйте свойство Data в переменную, A. Затем просмотрите последний блок данных double, которые можно получить доступ к использованию имени поля, volume.
A = m.Data; myVolume = A(2).volume
myVolume =
2 13 32 5 5 16 4 22 3 8
2 9 53 38 13 19 23 85 2 120
29 10 6 1 2 5 6 58 20 11
7 15 4 1 5 18 1 4 14 8
9 8 4 2 0 9 8 6 3 3fileName Имя файла, чтобы сопоставитьИмя файла, чтобы сопоставить включая расширение файла, заданное как вектор символа или представить скаляр в виде строки. Аргумент filename не может включать подстановочные символы (например, * или ?).
Пример: 'myFile.dat'
Типы данных: char | string
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Имя должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
m = memmapfile ('myFile.dat', ' format ', 'int32', 'Смещение', 255) сопоставляет int32 данные в файле, myFile.dat, к памяти, начинающей с 256-го байта.'Writable' — Тип доступа позволен сопоставленной областиfalse (значение по умолчанию) | trueТип доступа позволен сопоставленной области, заданной как пара, разделенная запятой, состоящая из 'Writable' и или true или false. Если Writable свойство установлено в false, сопоставленная область только для чтения. Если true, то доступ для записи позволен.
Пример: 'Перезаписываемый', верный
Типы данных: логический
'Offset' — Количество байтов от запуска файла, чтобы запуститься сопоставленной областиКоличество байтов от запуска файла к запуску сопоставленной области, заданной как пара, разделенная запятой, состоящая из 'Offset' и неотрицательного целого числа. Это значение основано на нуле. Таким образом, значение Offset 0 представляет запуск файла.
Пример: 'Сместите', 1024
Типы данных: double
формат Формат сопоставленной области'uint8' (значение по умолчанию) | вектор символа | представляет скаляр в виде строки | n-by-3 массив ячеекФормат сопоставленного содержимого области, заданного как пара, разделенная запятой, состоящая из 'Format' и односимвольного вектора или скаляра строки или n-by-3 массив ячеек.
Если область файла, которую вы сопоставляете, содержит данные только одного типа, задайте значение Format как вектор символа или представьте в виде строки скаляр, идентифицирующий тот тип.
Пример: int16
Чтобы задать форму массивов, чтобы примениться к чтению данных или записанный в отображаемый файл и имя поля, чтобы сослаться на этот массив, задают значение Format как 1 3 массив ячеек. Первая ячейка содержит вектор символа или скаляр строки идентификация типа данных, чтобы примениться к сопоставленной области. Вторая ячейка содержит измерения массива, чтобы примениться к области. Третья ячейка задает имя поля, чтобы использовать в массиве структур Data карты распределения памяти. Задайте имя поля как скаляр строки или вектор символа.
Пример:
{'uint64', [30 4 10], 'x'}
Если область, которую вы сопоставляете, состоит из сегментов переменных типов данных или форм массивов, можно задать отдельный формат для каждого сегмента с помощью n-by-3 массив ячеек, где n является количеством сегментов.
Пример: {'uint64', [30 4 10], 'x'; 'uint32', [30 4 6], 'y'}
Можно использовать любой из следующих типов данных, когда вы задаете значение Format:
int8
int16
int32
int64
uint8
uint16
uint32
uint64
единственный
'double'
Типы данных: char | представляет в виде строки | ячейка
повторение Число раз, чтобы применить параметр FormatInf (значение по умолчанию) | положительное целое числоЧисло раз, чтобы применить параметр Format к сопоставленной области файла, заданного как пара, разделенная запятой, состоящая из 'Repeat' и положительного целого числа. Если значением Repeat является Inf, то memmapfile применяет параметр Format до конца файла.
Пример: 'Повторитесь', 2000
Типы данных: double
m Карта распределения памятиmemmapfileКарта распределения памяти, возвращенная как объект memmapfile со следующими свойствами.
| Свойство | Описание |
|---|---|
| Путь и имя отображаемого файла |
| Тип доступа позволен сопоставленной области |
| Количество байтов от запуска файла к запуску сопоставленной области |
| Формат содержимого сопоставленной области, включая тип данных, размер массивов и имя поля, которым можно получить доступ к данным |
| Число раз, чтобы применить шаблон, заданный свойством Format в сопоставленную область файла |
| Данные с отображенной памятью из файла. Data может быть числовым массивом или массивом структур с именами полей, заданными в свойстве Format |
Значения для любого свойства (за исключением Data) установлены в то время, когда вы вызываете memmapfile, с помощью аргументов в виде пар "имя-значение".
Доступ к любому свойству m с записью через точку, подобной доступу к полям массива структур. Например, чтобы получить доступ к данным с отображенной памятью в свойстве Data, выполнить одно из следующих действий:
Если Data является числовым массивом, вызовите m.Data Данные.
Если Data является скалярным массивом структур (1 на 1), вызовите , где m.Data.fieldnamefieldname является именем поля.
Если Data является нескалярным массивом структур, вызовите , где m.Data(index).fieldnameindex является индексом для элемента в массиве структур, и fieldname является именем поля. Например, чтобы получить доступ к данным файла в поле temperature первого элемента Data, вызовите m.Data(1).temperature.
После того, как вы создадите карту распределения памяти, m, можно изменить значение любого из его свойств, за исключением Data. Чтобы присвоить новое значение, используйте запись через точку. Например, чтобы установить новое значение Offset для m, введите:
m.Offset = 2048;
Можно сопоставить только существующий файл. Вы не можете создать новый файл и сопоставить тот файл с памятью в одной операции. Используйте функции ввода-вывода файла MATLAB, чтобы создать файл прежде, чем попытаться сопоставить его с памятью.
После того, как memmapfile определяет местоположение файла, MATLAB хранит абсолютный путь файла внутренне, и затем использует этот сохраненный путь, чтобы определить местоположение файла от той точки на. В результате можно работать в других директориях вне текущего рабочего каталога и сохранить доступ к отображаемому файлу.
memmapfile не расширяет или добавляет к отображаемому файлу. Используйте вместо этого стандартные функции файлового ввода-вывода как fopen и fwrite.
Фактическое отображение файла к адресному пространству MATLAB не происходит, когда вы создаете объект memmapfile. Карта распределения памяти, на основе информации, в настоящее время хранившейся в сопоставленном объекте, сгенерирована в первый раз, когда вы ссылаетесь или изменяете свойство Data для того объекта.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.