这个例子显示了如何创建三个不同的内存映射,然后写每个地图使用适当的语法。然后,它显示了如何使用您的映射数据的副本。
你可以写一个文件使用相同的MATLAB®命令你使用MATLAB的工作区中访问变量。通过访问数据
财产的内存映射,映射文件的内容显示为一个数组中当前活跃的工作区。简单指数到这个数组写入数据文件。时所使用的语法编写映射内存取决于的格式数据
内存映射的属性。
首先,创建一个示例文件命名records.dat
,在当前文件夹。
rng (“默认”)myData =兰德([1]5000年);文件标识= fopen (“records.dat”,' w ');写入文件(文件标识,myData,“双”);文件关闭(文件标识);
映射文件作为16-bit-unsigned整数序列。使用格式
名称-值对参数来指定的值类型uint16
。
m = memmapfile (“records.dat”,…“抵消”,20岁,…“格式”,“uint16”,…“重复”15);
因为文件映射序列的一个类(uint16
),数据
是一个数字数组。
确保你有写权限的映射文件。设置可写的
内存映射的属性,米
,真正的
。
m。可写= true;
创建一个矩阵X
这是相同的大小数据
属性,并将它写入映射文件的一部分。所有常见的MATLAB索引和数据类规则适用于赋值时通过内存映射。你指定的类,必须大得足以容纳值被分配。
X = uint16 (1:1:15);m.Data= X;
X
是一个1-by-15向量的整数值从1到15。
验证新值写入到文件中。指定一个抵消
值0开始读取文件的开始。指定一个重复
价值35查看总共35值。使用重塑
函数的值显示为一个7-by-5矩阵。
m。抵消= 0;m。重复= 35;重塑(m.Data、5、7)
ans =7 x5 uint16矩阵47739 26762 4663 16362 3197 24407 64575 16364 31612 40832 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 12673 53994 16337 46560 44024 32781 16353 24667 24572 41957
中的值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: [300×8 uint16] y: [200 x5双)
数据
是一个标量结构数组。这是因为该文件,records.dat
包含多个数据类型的映射,不重复。
替换矩阵,x
,一个矩阵的问题。
m.Data。x= ones(300,8,“uint16”);
地图文件,records.dat
作为一个25-by-8矩阵的类型uint16
其次是15-by-5矩阵的类型双
。重复模式的20倍。
m = memmapfile (“records.dat”,…“格式”,{…“uint16”(5 - 4)“x”;…“双”[15 5]“y”},…“重复”,20岁,可写的,真正的);
查看数据
财产
m.Data
ans =20×1结构体数组字段:x y
数据
是一个nonscalar结构数组,因为文件映射多个数据类型的重复序列。
写所有的数组字段命名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 50 50 50 50 50 50 50 50 50 50 50 50
时所使用的语法编写映射内存取决于的格式数据
内存映射的属性。查看内存映射的属性通过键入的名称memmapfile
对象。
此表显示了写作的语法一个矩阵,X
内存映射,米
。
的格式数据 财产 |
语法编写映射文件 |
---|---|
数字数组 例子: |
m.Data= X; |
标量(1×1)结构数组 例子: 1 x1结构体数组字段:x y |
m.Data。字段名= X;
|
Nonscalar ( 例子: 20 x1结构体数组字段: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;
验证0被写入d(2)方式
d(2)方式
ans =5×50 0 0 0 0 0 0 0 0 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