MAT
(PRONOM update) |
|||
(4 intermediate revisions by 3 users not shown) | |||
Line 16: | Line 16: | ||
== Identification == | == Identification == | ||
− | Level 5 files begin with the text string <code>MATLAB 5.0 MAT-file</code>. No such unique pattern exists for level 4. The MIME type of this format is unofficial, and it is used by [[Apache Tika]] | + | * Level 5 files begin with the text string <code>MATLAB 5.0 MAT-file</code>. |
+ | * Level 7 files begin with the text string <code>MATLAB 7.0 MAT-file</code>. | ||
+ | * Level 7.3 files begin with the text string <code>MATLAB 7.3 MAT-file</code>, and contains [[HDF5]] structure. | ||
+ | No such unique pattern exists for level 4. | ||
+ | At offset 12 the imaginary flag is stored as 4 byte integer. | ||
+ | If this is 1, the matrix contains an imaginary part. | ||
+ | If the matrix only contains real data, the value is 0. | ||
+ | Depending on the endian type, the byte at offset 12 or 15 has the value 0 or 1 and the three remaining bytes have the value 0. | ||
+ | So the two middle bytes have the value 0. | ||
+ | At offset 20 the matrix name is stored as null terminated ASCII string. | ||
+ | So the byte at this offset contains a character like a letter. | ||
+ | At offset 0 the type flag is stored as 4 byte integer. | ||
+ | In decimal that type integer is represented as <code>MOPT</code>, where <code>M</code> counts the thousands and indicates the numeric format of numbers on the machine. | ||
+ | Biggest possible value is 4052 (<code>0xFD4</code>). That means 2 upper bytes are always 0. | ||
+ | For big endian <code>M</code> value is 1. So lowest flag value is 1000 (<code>0x3E8</code>) and highest value is 1052 (<code>0x41C</code>). | ||
+ | The highest hexadecimal value with 4 as second byte occur for 16-bit and 8-bit integers. | ||
+ | For other number formats second byte has value 3. | ||
+ | For little endian machine <code>M</code> value is 0. That means highest type value is 52. | ||
+ | The MIME type of this format is unofficial, and it is used by [[Apache Tika]] | ||
== Specification == | == Specification == | ||
Line 23: | Line 41: | ||
== Software == | == Software == | ||
* [http://www.mathworks.com/matlabcentral/fileexchange/6893-matcat-mat-file-corruption-analysis-tool MATCAT - MAT-File Corruption Analysis Tool] (requires MATLAB) | * [http://www.mathworks.com/matlabcentral/fileexchange/6893-matcat-mat-file-corruption-analysis-tool MATCAT - MAT-File Corruption Analysis Tool] (requires MATLAB) | ||
+ | |||
+ | == Sample files == | ||
+ | * {{DexvertSamples|image/mat5}} | ||
== See also == | == See also == | ||
Line 31: | Line 52: | ||
* [http://stackoverflow.com/questions/3947549/what-is-the-difference-between-m-and-mat-files-in-matlab What is the difference between .m and .mat files in MATLAB] | * [http://stackoverflow.com/questions/3947549/what-is-the-difference-between-m-and-mat-files-in-matlab What is the difference between .m and .mat files in MATLAB] | ||
* [http://www.mathworks.com/help/matlab/import_export/mat-file-versions.html MAT file versions] | * [http://www.mathworks.com/help/matlab/import_export/mat-file-versions.html MAT file versions] | ||
+ | * [https://www.mathworks.com/help/pdf_doc/matlab/matfile_format.pdf The MAT-file format] | ||
* [http://en.wikibooks.org/wiki/Octave_Programming_Tutorial/Saving_and_loading_a_MAT-file Saving and loading a MAT-file in GNU Octave] | * [http://en.wikibooks.org/wiki/Octave_Programming_Tutorial/Saving_and_loading_a_MAT-file Saving and loading a MAT-file in GNU Octave] | ||
* Writing Custom Applications to Read and Write MAT-Files [http://www.mathworks.se/help/matlab/matlab_external/custom-applications-to-read-and-write-mat-files.html here] | * Writing Custom Applications to Read and Write MAT-Files [http://www.mathworks.se/help/matlab/matlab_external/custom-applications-to-read-and-write-mat-files.html here] | ||
+ | |||
+ | [[Category:HDF based file formats]] |
Latest revision as of 20:31, 25 June 2024
MAT is a format used by Mathworks' Matlab for storing formatted data (matrices, structs, scalars and strings).
Apart from Matlab, the format is also supported by Mathematica. GNU Octave, an open source alternative to Matlab, should be able to read and write the format as well. Scientific computing packages NumPy and SciPy enable support for MAT-files in Python.
Contents |
[edit] Versions
The published specification makes a distinction between Level 4 and Level 5 MAT-files, where Level 4 files are compatible with older MATLAB versions (up to version 4), whereas level 5 files are compatible with MATLAB versions 5 and higher. The overall layout of a Level 4 file is quite different from Level 5, and the two might even be considered separate formats. For example, Level 4 files don't have a unique 'magic' byte pattern that would allow easy identification, whereas the header of a Level 5 file includes a descriptive text field that could be used for this.
Matlab_figure files are really just a special case of the level 5 MAT-File format.
[edit] Identification
- Level 5 files begin with the text string
MATLAB 5.0 MAT-file
. - Level 7 files begin with the text string
MATLAB 7.0 MAT-file
. - Level 7.3 files begin with the text string
MATLAB 7.3 MAT-file
, and contains HDF5 structure.
No such unique pattern exists for level 4.
At offset 12 the imaginary flag is stored as 4 byte integer.
If this is 1, the matrix contains an imaginary part.
If the matrix only contains real data, the value is 0.
Depending on the endian type, the byte at offset 12 or 15 has the value 0 or 1 and the three remaining bytes have the value 0.
So the two middle bytes have the value 0.
At offset 20 the matrix name is stored as null terminated ASCII string.
So the byte at this offset contains a character like a letter.
At offset 0 the type flag is stored as 4 byte integer.
In decimal that type integer is represented as MOPT
, where M
counts the thousands and indicates the numeric format of numbers on the machine.
Biggest possible value is 4052 (0xFD4
). That means 2 upper bytes are always 0.
For big endian M
value is 1. So lowest flag value is 1000 (0x3E8
) and highest value is 1052 (0x41C
).
The highest hexadecimal value with 4 as second byte occur for 16-bit and 8-bit integers.
For other number formats second byte has value 3.
For little endian machine M
value is 0. That means highest type value is 52.
The MIME type of this format is unofficial, and it is used by Apache Tika
[edit] Specification
[edit] Software
- MATCAT - MAT-File Corruption Analysis Tool (requires MATLAB)
[edit] Sample files
[edit] See also
[edit] Links
- What is the difference between .m and .mat files in MATLAB
- MAT file versions
- The MAT-file format
- Saving and loading a MAT-file in GNU Octave
- Writing Custom Applications to Read and Write MAT-Files here