Создайте карту памяти в файл
сопоставляет существующий файл, 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'
The Data свойство содержит 10 значений двойной точности в records.dat.
Создайте карту памяти для большого массива int32 данные. Задайте доступ к записи и nondefault 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 свойство игнорировать первые 9000 байт в файле и Writable свойство, разрешающее доступ для записи.
m = memmapfile('records.dat',... 'Offset',9000,... 'Format','int32',... 'Writable',true);
Система координат Offset значение 9000 указывает, что первые 9000 байтов records.dat не сопоставлены.
Введите имя карты памяти, чтобы увидеть текущие настройки для всех свойств.
m
m =
Filename: 'd:\matlab\records.dat'
Writable: true
Offset: 9000
Format: 'int32'
Repeat: Inf
Data: 7750x1 int32 arrayThe Format свойство указывает, что любая операция чтения или записи, выполненная через карту памяти, считывает и записывает содержимое файла как последовательность 32-битных целых чисел со знаком. The Data свойство содержит только 7750 элементов, поскольку первые 9000 байт records.dat, представляющие первые 2250 значений в файле, не отображаются.
Просмотрите первые пять элементов отображенных данных путем доступа к Data свойство m.
m.Data(1:5)
ans =
2251
2252
2253
2254
2255Создайте карту памяти для области файла, содержащей 100 значений двойной точности.
В командной строке создайте образец файла в текущей папке под названием mybinary.bin, содержащего 100 значений двойной точности.
rng('default') randData = rand([100,1]); 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:
xThe 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 - коэффициент масштабирования расчета.
rng('default') k = 8.21; pres1 = randi([1,300],[50,1],'uint16'); temp1 = randi([1,300],[50,1],'uint16'); vol1 = double(reshape(k*temp1./pres1,5,10)); pres2 = randi([5,500],[50,1],'uint16'); temp2 = randi([5,500],[50,1],'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, содержащий массив uint16 50 на 1 значения, далее поле, 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
volumeThe 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 - Имя файла в картуИмя файла, который будет сопоставлен, включая расширение файла, заданное как вектор символов или строковый скаляр. The filename аргумент не может включать подстановочные символы (для примера, * или ?).
Пример: 'myFile.dat'
Типы данных: char | string
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
m = memmapfile('myFile.dat','Format','int32','Offset',255) карты int32 данные в файле, myFile.dat, в память начиная с 256-го байта.'Writable' - Разрешение на записьfalse (по умолчанию) | trueРазрешение на запись, заданное как true или false. Если вы задаете falseсопоставленная область доступна только для чтения. Если вы задаете trueсопоставленная область имеет разрешения на чтение и запись.
Пример: 'Writable',true
Типы данных: logical
'Offset' - Расстояние от начала файлаРасстояние от начала файла до начала сопоставленной области, заданное как неотрицательное целое число. Это значение основано на нуле, значение 0 представляет начало файла.
Пример: 'Offset',1024
Типы данных: double
'Format' - Формат отображаемой области'uint8' (по умолчанию) | вектор символов | строковый скаляр | nмассив ячеек -by-3Формат отображаемой области, заданный как вектор символов, строковый скаляр или n-by-3 массив ячеек.
Если область, которую вы отображаете, содержит данные только одного типа, задайте значение Format как вектор символов или строковый скаляр, идентифицирующий тип. Например, если ваши данные состоят только из 16-битных целых чисел со знаком, задайте 'int16'. При задании Format можно использовать любой из следующих типов данных значение:
'int8'
'int16'
'int32'
'int64'
'uint8'
'uint16'
'uint32'
'uint64'
'single'
'double'
Если область, которую вы сопоставляете, требует, чтобы вы задали форму массива к данным в отображаемом файле, а также имя поля для ссылки на этот массив, задайте Format значение как массив ячеек 1 на 3.
Первая камера значение, заданное как вектор символов или строковый скаляр, присваивает тип данных, применяемый к сопоставленной области.
Второе значение камеры, заданное как массив 1 на n, присваивает измерения массива, применяемые к сопоставленной области.
Третья камера значение, заданное как вектор символов или строковый скаляр, присваивает имя поля, используемое в Data массив структур карты памяти. Для примера, {'uint64',[30 4 10],'x'}
Если область, которую вы отображаете, состоит из сегментов различных типов данных или форм массива, можно задать формат каждого сегмента, используя строки массива ячеек n на 3. Для примера, {'uint64',[30 4 10],'x'; 'uint32',[30 4 6],'y'}
Типы данных: char | string | cell
'Repeat' - Количество раз применять Format параметрInf (по умолчанию) | положительное целое числоКоличество раз, чтобы применить Format параметр для отображаемой области, заданный как Inf или положительное целое число. Если вы задаете Inf, memmapfile применяет Format параметр до конца файла.
Пример: 'Repeat',2000
Типы данных: double
m - Карта памятиmemmapfile объектКарта памяти, возвращенная как memmapfile объект со следующими свойствами.
| Свойство | Описание |
|---|---|
| Путь и имя отображаемого файла |
| Тип доступа, разрешенный для сопоставленной области |
| Количество байтов от начала файла до начала сопоставленной области |
| Формат содержимого сопоставленной области, включая тип данных, размер массива и имя поля, с помощью которого можно получить доступ к данным |
| Количество раз, чтобы применить шаблон, заданный Format свойство для сопоставленной области файла |
| Данные из файла, сопоставленные с памятью. Data может быть числовым массивом или массивом структур с именами полей, заданными в Format свойство |
Значения для любого свойства (кроме Data) устанавливаются в то время, когда вы вызываете memmapfile, с использованием аргументов пары "имя-значение".
Доступ к любому свойству m с записью через точку, подобной доступу к полям массива структур. Например, для доступа к сопоставленным с памятью данным в Data выполните одно из следующих действий:
Если Data является числовым массивом, вызов m.Data.
Если Data является скалярным (1 на 1) массивом структур, вызов данные. , где fieldnamefieldname - имя поля.
Если 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.