memmapfile
ファイルに対するメモリ マップの作成
説明
は、1 つ以上の名前と値のペアの引数を使用して m
= memmapfile(filename
,Name,Value
)m
のプロパティを指定します。たとえば、ファイルのデータ形式を指定できます。
例
コマンド プロンプトで、現在のフォルダーに 10 個の uint8
値を含むサンプル ファイル records.dat
を作成します。
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 array
MATLAB は records.dat
ファイル全体をメモリにマップし、メモリ マップのすべてのプロパティを既定値に設定します。メモリ マップは変数 m
に割り当てられます。この例では、コマンドは、ファイル全体を符号なし 8 ビット整数の列としてマップし、さらに、呼び出し側にその内容への読み取り専用のアクセスを与えます。
m
の Data
プロパティにアクセスして、マップされたデータを表示します。
m.Data
ans = 1 2 3 4 5 6 7 8 9 10
倍精度データのメモリ マップを作成します。構文は、その他のデータ型を指定する場合と同様です。
コマンド プロンプトで、現在のフォルダーに 10 個の double
値を含むサンプル ファイル records.dat
を作成します。
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
。任意の 1 つのプロパティ、たとえば Format
を表示するには、コマンド ウィンドウに m.Format
と入力します。
m.Format
ans = 'double'
Data
プロパティには、records.dat
の 10 個の倍精度値が格納されています。
int32
データの大きな配列のメモリ マップを作成します。書き込みアクセスを指定し、既定値以外の Format
値と Offset
値を設定します。
コマンド プロンプトで、現在のフォルダーに 10,000 個の int32
値を含むサンプル ファイル records.dat
を作成します。
myData = int32([1:10000]); fileID = fopen('records.dat','w'); fwrite(fileID,myData,'int32'); fclose(fileID);
records.dat
のメモリ マップを作成し、出力の Format
プロパティを int32
に設定します。さらに、ファイルの最初の 9000 バイトを無視するように Offset
プロパティを設定し、書き込みアクセスを許可するように Writable
プロパティを設定します。
m = memmapfile('records.dat',... 'Offset',9000,... 'Format','int32',... 'Writable',true);
9000
の Offset
値は、records.dat
の最初の 9000 バイトがマップされないことを示しています。
メモリ マップの名前を入力して、すべてのプロパティの現在の設定を表示します。
m
m = Filename: 'd:\matlab\records.dat' Writable: true Offset: 9000 Format: 'int32' Repeat: Inf Data: 7750x1 int32 array
Format
プロパティは、メモリ マップによる読み取りまたは書き込み操作はいずれも、ファイルの内容を符号付き 32 ビット整数のシーケンスとして読み書きすることを示しています。Data
プロパティには、7750 個の要素しか格納されていません。これは、ファイルの最初の 2250 個の値を表す records.dat
の最初の 9000 バイトがマップされないからです。
m
の Data
プロパティにアクセスして、マップされたデータの最初の 5 つの要素を表示します。
m.Data(1:5)
ans = 2251 2252 2253 2254 2255
100 個の倍精度値を含むファイルの領域のメモリ マップを作成します。
コマンド プロンプトで、現在のフォルダー に、100 個の倍精度値を含むサンプル ファイル mybinary.bin
を作成します。
rng('default') randData = rand([100,1]); fileID = fopen('mybinary.bin','w'); fwrite(fileID,randData,'double'); fclose(fileID);
mybinary.bin
の最初の 75 個の値を、フィールド名 x
を使用してメモリ マップの構造体で参照できる、5×5×3 の倍精度値の配列にマップします。名前と値のペアの引数 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 A
Name 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);
一意の名前でアクセスできる配列にファイルをマップします。50 行 1 列 の uint16
値の配列を含むフィールド pressure
を定義し、その後に 50 行 1 列 の uint16
値の配列を含むフィールド temperature
を定義します。5 行 10 列の倍精度値の配列を含むフィールド volume
を定義します。cell 配列を使用してマップ領域の形式を定義し、このパターンを 2 回繰り返します。
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
メモリ マップ m
の Data
プロパティは、Format
が 2 回適用されるため、2 行 1 列の構造体配列になります。
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 3
入力引数
ファイル拡張子を含む、マップするファイルの名前。文字ベクトルまたは string スカラーとして指定します。filename
引数にワイルドカード文字 (*
や ?
など) を含めることはできません。
例: 'myFile.dat'
データ型: char
| string
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: m = memmapfile('myFile.dat','Format','int32','Offset',255)
は、ファイル myFile.dat
の int32
データを 256 番目のバイトから開始するメモリにマップします。
書き込み権限。true
または false
として指定します。false
を指定すると、マップ領域は読み取り専用になります。true
を指定すると、マップ領域に対する読み取りと書き込みの両方の権限が付与されます。
例: 'Writable',true
データ型: logical
ファイルの先頭からマップ領域の先頭までの距離。非負の整数として指定します。この値は 0 ベースで、値 0 はファイルの先頭を表します。
例: 'Offset',1024
データ型: double
マップ領域の形式。文字ベクトル、string スカラー、または n
行 3 列の cell 配列として指定します。
マップする領域に 1 つのデータ型のみが含まれている場合、Format の値にはそのデータ型を示す文字ベクトルまたは string スカラーを指定します。たとえば、データが 16 ビット符号付き整数のみの場合は 'int16'
を指定します。Format
の値を指定する際には、次のデータ型が使用できます。
'int8'
'int16'
'int32'
'int64'
'uint8'
'uint16'
'uint32'
'uint64'
'single'
'double'
マップする領域でマップされるファイルのデータに対する配列の形状とこの配列を参照するフィールド名を指定する必要がある場合、Format
値を 1 行 3 列の cell 配列として指定します。
最初の cell の値として、マップ領域に適用するデータ型を割り当てる文字ベクトルまたは string スカラーを指定します。
2 番目の cell の値として、マップ領域に適用する配列の次元を割り当てる 1 行 n 列の配列を指定します。
3 番目の cell の値として、メモリ マップの
Data
構造体配列で使用するフィールド名を割り当てる文字ベクトルまたは string スカラーを指定します。たとえば、{'uint64',[30 4 10],'x'}
のようになります。
マップする領域がさまざまなデータ型または配列の形状のセグメントから構成されている場合、n 行 3 列の cell 配列の行を使用して各セグメントの形式を指定できます。例: {'uint64',[30 4 10],'x'; 'uint32',[30 4 6],'y'}
データ型: char
| string
| cell
マップ領域への Format
パラメーターの適用回数。Inf
または正の整数として指定します。Inf
を指定すると、memmapfile
はファイルの最後まで Format
パラメーターを適用します。
例: 'Repeat',2000
データ型: double
出力引数
メモリ マップ。以下のプロパティをもつ memmapfile
オブジェクトとして返されます。
プロパティ | 説明 |
---|---|
| マップされたファイルのパスと名前 |
| マップ領域で許可されるアクセス タイプ |
| ファイルの先頭からマップされた領域の先頭までのバイト数 |
| マップされた領域のコンテンツの形式。データ型、配列サイズ、データへのアクセスに使用するフィールド名などを含む |
| Format プロパティで指定されたパターンをファイルのマップされた領域に適用する回数 |
| ファイルからメモリにマップされたデータ。Data は Format プロパティで指定されたフィールド名をもつ数値配列または構造体配列 |
Data
以外のプロパティの値はすべて、memmapfile
の呼び出し時に名前と値のペアの引数により設定されます。
m
プロパティには構造体配列フィールドへのアクセス同様、ドット表記を使ってアクセスします。たとえば、Data
プロパティのメモリにマップされたデータにアクセスするには、次のいずれかを実行します。
Data
が数値配列の場合は、m.Data
を呼び出します。Data
がスカラー (1 行 1 列) 構造体配列の場合は、m.Data.
を呼び出します。ここで、fieldname
fieldname
はフィールドの名前です。Data
が非スカラー構造体配列の場合は、m.Data(
を呼び出します。ここで、index
).fieldname
index
は構造体配列の要素のインデックス、fieldname
はフィールドの名前です。たとえば、Data
の最初の要素のtemperature
フィールドのファイル データにアクセスするには、m.Data(1).temperature
を呼び出します。
メモリ マップ m
の作成後、Data
以外のすべてのプロパティの値は変更できます。新しい値を割り当てるには、ドット表記を使用します。たとえば、m
に新しい Offset
値を設定するには、次のように入力します。
m.Offset = 2048;
ヒント
既存のファイルのみマップできます。新しいファイルを作成して、そのファイルを一度の操作でメモリにマップすることはできません。このファイルのメモリへのマップを行う前に、MATLAB ファイル I/O 関数を使用してファイルを作成してください。
関数
memmapfile
がファイルの位置を特定すると、MATLAB はファイルの絶対パス名を内部に保存します。そして、以降のこのファイルの位置の特定にはこの保存されたパスを使用します。これにより、現在の作業ディレクトリ以外のディレクトリで作業しながら、マップされたファイルへのアクセスを保てます。memmapfile
では、マップされたファイルに対する拡張や追加は行われません。代わりに、fopen
やfwrite
のような標準ファイル I/O 関数を使用してください。
アルゴリズム
MATLAB アドレス空間へのファイルの実際のマッピングは、memmapfile
オブジェクトを作成する際には実行されません。メモリ マップは、マッピングされたオブジェクトに現在格納されている情報に基づいており、そのオブジェクトの Data
プロパティを最初に参照または変更したときに生成されます。
拡張機能
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入この関数はスレッドベースの環境をサポートしています。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)