这个示例展示了如何创建三个不同的内存映射,然后使用适当的语法对每个映射进行写入。然后,介绍如何处理映射数据的副本。
您可以使用相同的MATLAB写入文件®用于访问MATLAB工作空间中的变量的命令。通过访问数据
属性时,映射文件的内容将以数组的形式显示在当前活动工作区中。只需在这个数组中建立索引,将数据写入文件。写入映射内存时使用的语法取决于数据
内存映射的属性。
首先,创建一个名为records.dat
,在当前文件夹中。
rng (“默认”) myData = rand([50001]);文件标识= fopen (“records.dat”,' w ');写入文件(文件标识,myData,“双”);文件关闭(文件标识);
将文件映射为一个16位无符号整数序列。使用格式
名称-值对参数,以指定值的类型uint16
.
m = memmapfile (“records.dat”,...“抵消”, 20岁,...“格式”,“uint16”,...“重复”15);
因为该文件被映射为单个类的序列(uint16
),数据
是一个数字数组。
请确保您对映射文件具有写权限。设置可写的
内存映射的属性,米
,真正的
.
m.Writable = true;
创建一个矩阵X
这和数据
属性,并将其写入文件的映射部分。当通过内存映射给数据赋值时,所有常用的MATLAB索引和类规则都适用。您赋值的类必须足够大,以容纳被赋值的值。
X = uint16 (1:1:15);m.Data = X;
X
是一个1 × 15的整数向量,取值范围为1到15。
验证新值是否已写入文件。指定一个抵消
值0表示从文件的开头开始读取。指定一个重复
值35查看总共35个值。使用重塑
函数以7 × 5矩阵的形式显示值。
m.Offset = 0;m.Repeat = 35;重塑(m.Data、5、7)
ans =7 x5 uint16矩阵47739 26762 4663 16362 3197 24407 64575 16364 31612 40832 12 3 45 67 8 9 10 11 12 13 14 15 12673 53994
中的值X
都写进了档案records.dat
.
映射文件的区域,records.dat
,作为一个300 × 8的矩阵类型uint16
可以通过字段名引用,x
,后面是一个200 × 5的矩阵双
可以通过字段名引用,y
.属性指定映射文件的写权限可写的
名称-值对的论点。
m = memmapfile (“records.dat”,...“格式”, {...“uint16”(300 8)“x”;...“双”200年[5]“y”},...“重复”, 1可写的,真正的);
查看数据
财产
m.Data
ans =结构体字段:X: [300x8 uint16] y: [200x5 double]
数据
是标量结构数组。这是因为这个文件,records.dat
,映射为包含多个不重复的数据类型。
替换字段中的矩阵,x
,它的矩阵都是1。
m.Data.x = 1(300年8“uint16”);
地图文件,records.dat
,作为一个25 × 8的矩阵类型uint16
后面是一个15乘5的矩阵双
.重复这个模式20次。
m = memmapfile (“records.dat”,...“格式”, {...“uint16”(5 - 4)“x”;...“双”[15 5]“y”},...“重复”, 20岁,可写的,真正的);
查看数据
财产
m.Data
ans =20×1带有字段的结构数组:x y
数据
是一个非标量结构数组,因为该文件被映射为多个数据类型的重复序列。
将所有1的数组写入名为的字段x
在第12个元素中数据
.
m.Data(12)方式= ones(5,4,“uint16”);
的第12个元素数据
,将值50写入该字段第3至第5行中的所有元素,x
.
m.Data(12)方式(3:5,1:结束)= 50;
视图,x
的第12个元素数据
.
m.Data(12)方式
ans =5 x4 uint16矩阵1 1 1 1 1 1 1 1 1 1 1 1
写入映射内存时使用的语法取决于数据
内存映射的属性。的名称可以查看内存映射的属性memmapfile
对象。
这个表显示了写矩阵的语法,X
,到内存映射,米
.
的格式数据 财产 |
写入映射文件的语法 |
---|---|
数字数组 例子: |
m.Data = X; |
标量(1乘1)结构数组 例子: 1x1 struct array with fields: x y |
m.Data。字段名= X;
|
Nonscalar ( 例子: struct array with fields: x y |
m.Data (k)。字段名= X;
|
的类X
和元素的个数X
必须与那些数据
属性或领域数据
属性被访问。你不能改变数据
属性创建内存映射后memmapfile
函数。例如,不能通过从映射数组中删除或添加一行来减少或扩展数组的大小,m.Data
.
如果映射整个文件,然后在构造映射后追加到该文件,则所追加的数据不包括在映射区域中。如果您需要修改已映射到内存映射的数据的维度,米
,则必须修改格式
或重复
属性米
或重新创建米
使用memmapfile
函数。
请注意
要成功修改映射文件,您必须对该文件具有写权限。如果您没有写权限,尝试写入文件将产生错误,即使可写的
属性是真正的
.
示例的这一部分展示了如何处理映射数据的副本。变量中的数据d
是否由映射的文件数据副本m.Data (2)
.因为它是一个复制,修改数组数据d
不修改文件中包含的数据。
创建一个名为double.dat
.
myData =兰德([1]5000年)* 100;文件标识= fopen (“double.dat”,' w ');写入文件(文件标识,myData,“双”);文件关闭(文件标识);
将文件映射为一系列双
矩阵。
m = memmapfile (“double.dat”,...“格式”, {...“双”5 [5]“x”;...“双”5 [4]“y”});
查看m.Data(2)方式
.
m.Data(2)方式
ans =5×595.0545 54.7696 15.6697 97.2605 85.0706 53.2131 60.9054 5.8124 60.5319 25.6792 24.7686 86.3135 33.9707 33.8236 28.5496 43.7276 38.0696 81.7176 92.7984 77.9947 66.9088 74.8956 37.7548 89.8425 70.1395
复制m.Data
的变量,d
.
d = m.Data;
将所有零写入指定的字段x
在复制。
d(2)方式(1:5,1:5)= 0;
验证是否写入了零d(2)方式
d(2)方式
ans =5×50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
验证映射文件中的数据没有被更改。
m.Data(2)方式
ans =5×595.0545 54.7696 15.6697 97.2605 85.0706 53.2131 60.9054 5.8124 60.5319 25.6792 24.7686 86.3135 33.9707 33.8236 28.5496 43.7276 38.0696 81.7176 92.7984 77.9947 66.9088 74.8956 37.7548 89.8425 70.1395